我在本网站上阅读了很多关于处理datagrid变更的帖子。普遍的共识似乎是datagrid项应该实现INotifyPropertyChanged,然后在OnPropertyChanged()中执行任何必要的操作。 但是,当考虑视图模型和模型时,我不太清楚建议的做法是什么。
假设我的模型有很多字段和多种不同类型的项目列表。项目列表作为ItemSource绑定到相应视图中的datagrids。在我的视图模型(或模型)中,我想要一个标志(例如'IsDirty'),告诉我在字段和/或列表项中是否有任何更改。
处理对字段所做的更改很简单,因为它们在视图模型中将调用相应的OnPropertyChanged()。但是,数据网格项“OnPropertyChanged()”将在项目本身中调用。
如何让父视图模型(或模型)知道对其中一个datagrids中的某个项进行了更改?显然,我可以为每个项目提供对其父视图模型(或模型)的引用,但我想知道是否有更好的推荐做法。
感谢。
答案 0 :(得分:1)
维护父级IsDirty属性最简单的方法就是通过监听子项“OnPropertyChanged
事件,结合使用ObservableCollections和CollectionChanged
事件。
通常只有三个用例
Children
集合Children
集合中删除。最简单的解决方案是创建Children
&gt;类型的ObservableCollection<Child
属性。并挂钩到CollectionChanged事件。只要在集合中添加或删除子项,就会触发此事件。在这种情况下,您可以捕获所需的所有数据:
OnPropertyChanged
事件中,每当属性发生更改时切换IsDirty。初始化后,...... IsDirty
。OnPropertyChanged
事件。