n0n*_*0ne 7 .net c# wpf mvvm inotifypropertychanged
我有一个实现的模型,INotifyPropertyChanged它可能会被后台业务线程更新.它的相关ViewModel也实现了INotifyPropertyChanged.他们的View显然与ViewModel绑定.此视图可能会显示在多个位置,我的目标是在模型更改时更新所有这些视图.
我知道ViewModel应该注册PropertyChangedModel的事件.但我不知道注册和取消注册的最佳位置何时何地.特别是关于取消注册,因为我害怕在模型上有数百个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);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
并在 xaml 中(什么时候MyViewModel)DataContext:
<TextBlock Text="{Binding Model.ModelProperty}" />
Run Code Online (Sandbox Code Playgroud)
更新:
PropertyChanged也许这对于以“弱”方式挖掘模特的事件有一些帮助
使用 WeakEventManager 的中央事件调度,即使源对象生存期超出了侦听器,也可以对侦听器的处理程序进行垃圾收集(或手动清除)。
这是用在
这应该有望解决您需要显式取消注册的问题?
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |