【问题标题】:WPF - Update Datagrid in ObservableCollectionWPF - 在 ObservableCollection 中更新 Datagrid
【发布时间】:2013-12-25 14:20:00
【问题描述】:

当源被修改时,我的数据网格视图没有更新。

在我的 View.xaml 中:

<DataGrid IsReadOnly="True" AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding Items, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" SelectedItem="{Binding SelectedItem}">
   <DataGrid.Columns>
       <DataGridTextColumn Header="Date" Width="*" Binding="{Binding ProductHistoryInOutDate}" />
       <DataGridTextColumn Header="Quantité" Width="*" Binding="{Binding ProductHistoryQuantity}" />
   </DataGrid.Columns>
</DataGrid>

在我的 ViewModel.cs 中:

private ObservableCollection<ProductHistory> _Items;

public ObservableCollection<ProductHistory> Items
{
    get { return _Items; }
    set 
    { 
         _Items = value;
         RaisePropertyChanged("Items");
    }
}

[编辑]

命令:

public RelayCommand Remove
{
    get
    {
        if (_Remove == null)
        {
            _Remove = new RelayCommand(
                () => { _UOF.ProductHistoryRepository.Delete(this.SelectedItem);_UOF.Commit(); },
                () => SelectedItem != null);
        }

        return _Remove;
    }
}

移除按钮:

<Button Content="Delete" Command="{Binding Path=Remove}" />

【问题讨论】:

  • 可能你必须先将 itemsource 清空...
  • 您能提供更多细节吗?以何种方式修改源:是否更改了整个集合,是否添加/删除了项目,或者是否修改了 ProductHistory。你能发布显示项目如何修改的代码吗?
  • 当我删除 ProductHistory 时。公共 RelayCommand 删除 { get { if (_Remove == null) { _Remove = new RelayCommand(() => { _UOF.ProductHistoryRepository.Delete(this.SelectedItem); _UOF.Commit(); }, () => SelectedItem !=空值); } 返回_删除; } }

标签: c# wpf datagrid observablecollection


【解决方案1】:

我能想到的唯一解释是您的命令执行代码中缺少Items.Remove(this.SelectedItem)

我尝试从您的代码中制作和示例,如果我添加它,它工作正常,可观察集合没有问题。

由于我没有 RelayCommand 和 RaisePropertyChanged() 的代码,我不得不手动实现它来试用它,但我认为它来自某个库并且它工作正常。

它应该是这样的:

public RelayCommand Remove
{
    get
    {
        if (_Remove == null)
        {
            _Remove = new RelayCommand(
                () => { Items.Remove(this.SelectedItem); _UOF.ProductHistoryRepository.Delete(this.SelectedItem); _UOF.Commit(); },
                () => SelectedItem != null);
        }

        return _Remove;
    }
}

【讨论】:

  • 哇哦! MrZli 我爱你!哈哈哈我理解我的错误!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-31
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多