如果我的模型几乎是一个只读集合并在网格上显示,那么用户会选择一行。
我是否需要始终在模型上实施INotifyPropertyChanged?实施vs没有性能优势吗?
我想知道UI尝试使用类似
之类的效果是否会影响性能var x =模型为INotifyPropertyChanged;
它不会以其他方式使用。
答案 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
当引发属性更改时,对另一行执行某些操作。
实施它没有性能优势。