Csharp/C#教程:如果模型实现了INotifyPropertyChanged,ViewModel应该如何注册/取消注册PropertyChanged事件?分享


如果模型实现了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中(当MyViewModelDataContext ):

  

更新:

也许这对于以“弱”方式进入模型的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

(0)
上一篇 2021年12月22日
下一篇 2021年12月22日

精彩推荐