0

我已经阅读了该站点上有关处理数据网格更改的大量帖子。普遍的共识似乎是数据网格项目应该实现 INotifyPropertyChanged,然后在 OnPropertyChanged() 中执行任何必要的操作。但是,当考虑到视图模型和模型时,我不太清楚推荐的做法是什么。

假设我的模型有许多字段和多个不同类型的项目列表。项目列表作为 ItemSource 绑定到相应视图中的数据网格。在我的视图模型(或模型)中,我希望有一个标志(例如“IsDirty”),它告诉我字段和/或列表项中是否有任何更改。

处理对字段所做的更改很简单,因为它们对应的 OnPropertyChanged() 将在视图模型中被调用。但是,数据网格项目的 OnPropertyChanged() 将在项目本身中被调用。

如何让父视图模型(或模型)知道对其中一个数据网格中的一项进行了更改?显然,我可以为每个项目提供对其父视图模型(或模型)的引用,但我想知道是否有更好和推荐的做法。

谢谢。

4

1 回答 1

1

维护父 IsDirty 属性最简单的方法是通过侦听子项的OnPropertyChanged事件,结合使用 ObservableCollections 和CollectionChanged事件来完成。

通常只有三个用例

  1. 子项属性已更新
  2. 子项被添加到Children集合中
  3. 子项从Children集合中删除。

最简单的解决方案是创建一个>Children类型的属性ObservableCollection<Child并挂钩到 CollectionChanged 事件。每当从集合中添加或删除 Child 时,都会触发此事件。在这种情况下,您可以捕获所需的所有数据:

  1. 在父级初始化时,将所有初始子级添加到集合中,在您这样做时挂钩到每个OnPropertyChanged事件,每当属性更改时切换 IsDirty。初始化后,...
  2. Child added - 挂钩到孩子的 OnPropertyChanged 事件并切换IsDirty
  3. Child 已删除 - 从 Child 的OnPropertyChanged事件中脱钩。
于 2013-09-17T14:26:16.080 回答