C# Caliburn-已更改子ViewModel的属性

C# Caliburn-已更改子ViewModel的属性,c#,wpf,mvvm,caliburn,C#,Wpf,Mvvm,Caliburn,我在WPF应用程序中使用Caliburn和MVVM模式,并尝试使用尽可能多的约定。我遇到的一个问题是,我必须在导入的类上连接一些属性更改通知 假设我有这样一个ViewModel: class ViewModelA { private readonly IViewModelB _b; public ViewModelA(IViewModelB b) { _b = b; } public bool CanGo { g

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

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

如果您的“子”模型公开了公共属性,您可以使用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
    }
}
要正常工作,整个属性路径应该由通知对象组成。 你也可以在最后加一个“*”


表明B的所有属性应引起前提条件重新评估;请注意,“*”仅作用于适当路径的末端,仅作用于一个深度级别(它不跟踪B的子模型上的更改)。

我发现AutoCheckAvailabilityAttribute可以通过依赖CommandManager输入系统来实现这一点。然而,我认为这个选项调用我的CanGo方法的次数比我希望的要多。如何处理DependenciesAttribute?我似乎不知道如何让它工作,“.”语法是我所缺少的,我知道应该把它放在方法上,而不是CanX属性。我在任何地方都找不到使用这个的例子,谢谢。
[Dependencies("B.*")]