Caliburn - 用于子ViewModel的PropertyChanged

时间:2010-07-17 21:40:29

标签: c# wpf mvvm caliburn

我在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类型来管理它。

或者我是否完全错误地设计了这种情况?

1 个答案:

答案 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的子模型上的更改)。