WPF - 在ObservableCollection中更新Datagrid

时间:2013-12-25 14:20:00

标签: c# wpf datagrid observablecollection

修改源时,我的数据网格视图不会更新。

在我的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}" />

1 个答案:

答案 0 :(得分:2)

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

我尝试从你的代码制作和示例,如果我添加了它,它可以正常工作,observable collection没有问题。

由于我没有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;
    }
}