.net - MVVM Light 如何判断哪些记录发生了变化

标签 .net wpf wcf mvvm mvvm-light

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

有内置属性吗?或者我已经创建了一个属性来标记这些记录?

谢谢

最佳答案

您可以附加到 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/

相关文章:

c# - 两个数据网格具有相同的来源,但输出的结果略有不同

wpf - 带有 MEF 2 的 WPF MvvM 中的插件

javascript - IE 开发者工具栏 : How to debug javascript?

c# - WriteLine 类

wpf - 找不到类型或 namespace 名称 'Application'(您是否缺少使用D指令或程序集引用?)

c# - WCF:具有多个模块的数据协定序列化程序

c# - WCF 的不可序列化数据成员

c# - WCF 证书身份验证不起作用

asp.net - 是否有任何理由不将 pdb 文件部署到生产 Web 服务器?

c# - 用于异常处理和报告的 SmartAssembly 的替代方案?