有一个视图的集合ObservableCollection<BaseClass> Project {get;set;}。
任务如下:
如果对象的某些属性发生了变化,那么您需要通知用户项目已经发生变化并且需要保存。
除了如何在基类中实现之外,我没有想出任何其他方法INotifyPropertyChanged,但是有很多类,OnPropertyChanged将每个属性扩展为带有字段的属性是相当沉闷的。
有什么简洁的选择吗?
有一个视图的集合ObservableCollection<BaseClass> Project {get;set;}。
任务如下:
如果对象的某些属性发生了变化,那么您需要通知用户项目已经发生变化并且需要保存。
除了如何在基类中实现之外,我没有想出任何其他方法INotifyPropertyChanged,但是有很多类,OnPropertyChanged将每个属性扩展为带有字段的属性是相当沉闷的。
有什么简洁的选择吗?
手动实施的替代方法
INotifyPropertyChanged是使用片段或使用专用工具在编译期间将 IL 代码注入程序集。该领域公认的领导者是PostSharp,但是,当然,它是付费的。但是,有一个名为Fody的用于在编译时更改程序集的开源项目,其中一个附加项允许您只执行实现INF。顺便说一下,我建议您阅读 GitHub 页面上的 Fody 附加组件的完整列表,其中有很多有趣的东西。也可以自己写插件,开发方案不是很友好,但是例子很多(现成的插件也在GitHub上)。你可以尝试这样的事情:
您创建一个集合,使用此方法的集合中的所有元素都必须实现
INPC.在集合中的更改事件上挂起处理程序:
在委托中,我们遍历旧/新元素并删除/添加对象中的属性更改处理程序:
实际上,在这个方法里面,写通知代码:
那么,包含在集合中的对象本身的每个属性都必须与
INPC. 要在对象内更简洁和可读地实现属性,请使用第三方库,例如MVVM Light.