MVVM Light如何确定哪些记录发生了变化

时间:2010-12-28 18:58:56

标签: .net wpf wcf mvvm mvvm-light

在MVVM Light中,如果我有一个数据网格绑定(2路)到一个obersvable集合,当我在编辑几个记录并添加新记录后最终点击更新时,如何确定哪些已添加新记录和哪些添加新记录已被编辑。 (我猜哪个主键id = 0仍然可以标记为新的,但如何检查哪些被编辑)

是否有内置房产?或者我创建了一个标记这些记录的属性?

由于

1 个答案:

答案 0 :(得分:1)

您可以附加CollectionChanged上的ObservableCollection事件来查找该内容。

private void MyCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if(e.Action == NotifyCollectionChangedAction.Add)
    { 
         //use e.NewItems for added items
    }
    else if(e.Action == otifyCollectionChangedAction.Remove)
    {
         //use e.OldItems for removed items
    }
    ...
 }

至于找出哪些已被编辑,这不会对集合本身起作用,而是对集合中的实体起作用。一个好主意是让ViewModel / Model表示每一行并实现INotifyPropertyChanged或具有IsDirty属性,您可以检查。

因此,当项目被添加时,会附加到某个事件,该事件将提醒您任何更改。 (您可以在上面的CollectionChanged处理程序或为您创建模型的某种方法中执行此操作。

model.PropertyChanged += ModelChanged;
...
private void ModelChanged(object sender, PropertyChangedEventArgs e)
{
    Model model = (Model)sender;
    //Record in your own way that model has changed.
}