他们只是将其用作处理修改检测的聪明方法。考虑“保存更改”功能;您实际上并不想启用“保存”按钮,直到发生了一些变化,然后可以关闭IsDirty属性进行测试。
从技术上讲,您可以通过拥有一个基类挂钩INotifyPropertyChanged.PropertyChanged并维护自己的脏点(可能在基类中)来自己解决问题,而不是要求其所有类具有IsDirty
它们可能具有或不具有的属性需要时,它们已将其设置为类可以实现的可选功能。例如,在GameResult上查看无法更改的示例,因此不能将其标记为脏。
使用这种方法,您可以最大限度地减少实现该功能所需编写的代码量。您所有的派生类需要做的就是派生自BaseNotify
,ImplementIDirty
和调用SetPropertyChanged(...)
setter来设置私有跟踪字段,向任何观察者发出属性已更改的信号,并自动设置脏位。
注意:我只是做了一个有趣的观察:虽然SetProperty
扩展方法的实现确实设置了IsDirty
标志,但是BaseNotify
类的IsDirty
实现并未调用任何东西来冒泡的PropertyChanged
事件IsDirty
,这意味着与之绑定的对象将不会在其更新时更新。变化。我相信解决方法将是PropertyChanged
使用属性名称“ IsDirty”调用该扩展方法:
if(dirty != null) {
dirty.IsDirty = true;
handler.Invoke(sender, new PropertyChangedEventArgs("IsDirty"));
// Yes, I'm a bad person for hard-coding the name.
}
或者,您可以推迟发出IsDirty
更改通知,直到通知原始属性已更改为止。我只是选择保留原始逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句