如何响应CodePlex WPF DataGrid中更改的单元格?

时间:2009-05-28 09:21:32

标签: c# wpf datagrid

在我看来,我实施了WPF DataGrid from CodePlex

<toolkit:DataGrid x:Name="CodePlexDataGrid" 
    Style="{StaticResource ToolkitDataGrid}" 
    ItemsSource="{Binding Customers}"/>

它绑定到我的ViewModel中的ObservableCollection:

private ObservableCollection<Customer> _customers;
public ObservableCollection<Customer> Customers
{
    get
    {
        return _customers;
    }

    set
    {
        _customers = value;
        OnPropertyChanged("Customers");
    }
}

当我更改网格中的数据时,它会发生变化,但我找不到任何事件我可以处理以捕获这些更改,例如DataGridCellChanged以便我可以保存输入数据库的数据

什么是流程,通过它我们可以捕获对单元格的更改并将其保存回数据库?

2 个答案:

答案 0 :(得分:0)

我一直在使用CellEditEndingRowEditEnding这些事件,它们不适合您的需要吗?

答案 1 :(得分:0)

尝试以不同的方式接近它。而不是绑定到DataGrid上的事件,在Customer上实现INotifyPropertyChanged并处理Customer对象的属性更改事件。在WPF(而不是Silverlight)中,我认为您可以使用BindingList而不是ObservableCollection来观察集合中任何项目的属性更改。

对于Silverlight,我创建了一个ObservableCollection的子类,它为添加到集合中的任何项连接了PropertyChanged事件处理程序,然后将它们冒泡到集合公开的ItemPropertyChanged事件。

我可以这样做:

myCollection.ItemPropertyChanged += (sender,e) => {
   // sender is the item whose property changed
   // e is PropertyChangedEventArgs which has the name of the property that changed
}