2010-07-17 54 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

相關問題