我在WPF应用程序中使用Caliburn和MVVM模式,并尝试使用尽可能多的约定。我遇到的一个问题是我必须在导入的类上连接一些属性更改的通知。
假设我有一个像这样的ViewModel:
class ViewModelA
{
private readonly IViewModelB _b;
public ViewModelA(IViewModelB b)
{
_b = b;
}
public bool CanGo
{
get { return _b.MyBoolProperty; }
}
public void Go()
{
//Does something here
}
}
当MyBoolProperty的PropertyChanged事件从ViewModelB触发时,建议(正确)调用NotifyOfPropertyChange(()=> CanGo)的方法是什么?
过去我使用过PropertyObserver类型来管理它。
或者我是否完全错误地设计了这种情况?
答案 0 :(得分:3)
如果您的“sub”模型使用公共属性公开,您可以使用DependenciesAttribute来跟踪更改:
class ViewModelA
{
public IViewModelB B {get; private set;}
public ViewModelA(IViewModelB b)
{
B = b;
}
public bool CanGo
{
get { return B.MyBoolProperty; }
}
[Dependencies("B.MyBoolProperty")]
public void Go()
{
//Does something here
}
}
要正常工作,整个属性路径应由通知对象组成。 你也可以把最后的“*”
[Dependencies("B.*")]
表示B的所有属性都应该导致前置条件重新评估;请注意,“*”仅作用于proprerty路径的末尾,仅适用于一个级别的深度(它不跟踪B的子模型上的更改)。