2010-07-17 95 views
1

我在WPF应用程序中使用Caliburn和MVVM模式,并试图尽可能多地使用约定。我遇到的一个问题是当我必须在导入的类上连接一些属性更改的通知时。Caliburn-PropertyChanged for child ViewModel

说我有像这样一个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 
    } 
} 

什么是推荐的(正确)的方式来调用NotifyOfPropertyChange(()=>中国民促会)时会触发关闭MyBoolProperty PropertyChanged事件ViewModelB?

在过去,我用PropertyObserver类型来管理它。

或者我设计这个场景完全错误?

+0

我发现AutoCheckAvailabilityAttribute可以通过依赖CommandManager输入系统来完成这项工作。但是,我认为这个选项会比我想要的更多地调用我的CanGo方法。我如何用DependenciesAttribute来做到这一点?我似乎无法弄清楚如何使它工作。 – jonathanpeppers 2010-07-18 00:20:32

回答

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

+0

“。”语法是我所缺少的,并且知道把它放在方法上,而不是CanX属性。我找不到在任何地方使用这个例子,谢谢。 – jonathanpeppers 2010-07-18 02:33:22