1

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

还是我设计这个场景完全错误?

4

1 回答 1

3

如果您的“子”模型使用公共属性公开,您可以使用 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 的所有属性都应该引起前提条件的重新评估;请注意,“*”仅作用于属性路径的末尾,并且仅作用于一层深度(它不跟踪 B 的子模型的变化)。

于 2010-07-18T01:40:07.170 回答