我有一个实现的模型INotifyPropertyChanged
并且它可能会被后台业务线程更新。其相关ViewModel也实现了INotifyPropertyChanged
。他们的 View 显然绑定到 ViewModel。该视图可能会显示在多个位置,我的目标是当模型更改时所有这些位置都会更新。
我知道 ViewModel 应该注册PropertyChanged
模型的事件。但我不知道这个注册和注销的最佳地点是何时何地。特别是关于取消注册,因为我害怕模型上有数百个 VM 事件处理程序用于不再显示的 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
is the DataContext
):
<TextBlock Text="{Binding Model.ModelProperty}" />
Update:
或许这对进入这个领域有一些帮助PropertyChanged
模特们的“弱”时尚事件
IWeakEventListener http://msdn.microsoft.com/en-us/library/system.windows.iweakeventlistener.aspx
使用 WeakEventManager 的中央事件调度,即使源对象生命周期超出了侦听器,也可以对侦听器的处理程序进行垃圾收集(或手动清除)。
这是用在
约什·史密斯的《PropertyObserver》 http://joshsmithonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/
这应该有望解决您需要显式取消注册的问题?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)