在MVVM Light中,如果我有一个datagrid(2种方式)绑定(bind)到一个可观察的集合,并且当我在编辑几个记录并添加新记录后最终按下update时,如何确定哪些记录已被添加,哪些记录已被编辑。 (我猜哪个主键ID = 0仍可以标记为新键,但是如何检查已编辑的键)

有没有内置属性(property)?还是我创建了一个属性来标记这些记录?

谢谢

最佳答案

您可以将附加到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.
}

关于.net - MVVM Light如何确定哪些记录已更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4548610/

10-12 12:49
查看更多