如果模型实现了INotifyPropertyChanged,ViewModel应该如何注册/取消注册PropertyChanged事件?
我有一个实现INotifyPropertyChanged
的模型,它可能会被后台业务线程更新。 其相关的ViewModel还实现了INotifyPropertyChanged
。 他们的View显然与ViewModel绑定。 此视图可能会显示在多个位置,我的目标是在模型更改时更新所有这些视图。
我知道ViewModel应该注册Model的PropertyChanged
事件。 但我不知道注册和取消注册的最佳位置何时何地。 特别是关于取消注册,因为我害怕在模型上有数百个VM事件处理程序,用于VM /视图,不再显示。
提前致谢。
您是否绝对有必要限制View不直接绑定到Model?
您可以将Model公开为VM上的属性,然后让View直接绑定到它,从而不让VM从模型订阅INPC
就像是:
public class MyViewModel: INotifyPropertyChanged { ... private MyModel _model; public MyModel Model { get { return _model; } set { if (value == _model) return; value = _model; RaisePropertyChanged(() => Model); } } ... }
并在xaml中(当MyViewModel
是DataContext
):
更新:
也许这对于以“弱”方式进入模型的PropertyChanged
事件有一些帮助
IWeakEventListener
使用WeakEventManager的中央事件调度,即使源对象生命周期超出侦听器,也可以对侦听器的处理程序进行垃圾收集(或手动清除)。
用于
约什史密斯的PropertyObserver
这有望解决您需要明确取消注册的问题吗?
我通过在加载时挂接模型事件并在卸载时删除它来解决这个问题,这里的问题是如果视图模型离开屏幕,视图模型可能会错过事件。 我通常只是在加载时快速刷新数据。
OnLoad – 从模型和挂钩事件中刷新VM数据。 OnUnLoad – 删除您已放置的任何挂钩。
上述就是C#学习教程:如果模型实现了INotifyPropertyChanged,ViewModel应该如何注册/取消注册PropertyChanged事件?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987196.html