我应该总是在模型中实现INotifyPropertyChanged接口吗?

时间:2014-11-21 19:08:19

标签: wpf wpf-controls wpfdatagrid wpftoolkit wpf-4.0

如果我的模型几乎是一个只读集合并在网格上显示,那么用户会选择一行。

我是否需要始终在模型上实施INotifyPropertyChanged?实施vs没有性能优势吗?

我想知道UI尝试使用类似

之类的效果是否会影响性能

var x =模型为INotifyPropertyChanged;

它不会以其他方式使用。

2 个答案:

答案 0 :(得分:4)

如果您在任何数据绑定中使用该模型,那么是的,您应该实现INotifyPropertyChanged,即使它是完全不可变的。原因与性能无关,而是为了避免内存泄漏。

Binding将始终尝试注册更改通知,如果您未实施INotifyPropertyChanged或公开[Property]Changed形式的离散更改事件,它将通过{{注册1}} API。默认的基于反射的PropertyDescriptor实现使用全局订阅表,如果由于某种原因PropertyDescriptor没有完全取消订阅,则您的视图模型将无限期保持活动状态。这与绑定订阅Binding通知时使用的弱事件模式形成对比。运行时的绑定通常会自行清理,但Xaml设计人员因在这些情况下泄漏而臭名昭着,导致设计人员进程的内存消耗在您工作时稳定上升。

答案 1 :(得分:0)

如果您只是在DataGrid上展示并且不希望任何用户界面互动,那么这将改变Model的价值,那么您就不必实施{ {1}}。

WPF INPC机制相关联,以便从支持INPC更新UI。如果加载一次并且不会再次更改,则不需要它。但是,Model c 非常方便您需要实现它,如果说要求您将某些内容更新到另一行的业务逻辑,那么您基本上可以订阅其他模型的INPC当引发属性更改时,对另一行执行某些操作。

实施它没有性能优势。