2012-02-05 52 views
1

我有任務寫一個用戶控件來顯示一些使用MVVM模板的結果。如何在我的ViewModel中偵聽來自另一個ViewModel的更改?

主應用程序(稱爲ApplicationVM)有兩個屬性UserControlViewModelSelectedRecord。第一個屬性包含UserControlViewModel的一個實例。在XAML中,我使用這些屬性將UserControl綁定到UserControlViewModel。 DependencyProperty PageCount適用於視圖中的顯示功能與UserControlViewModel之間的簡單通知。

<control:UserControl DataContext="{Binding UserControlViewModel}" PageCount="{Binding DocumentPageCount}" /> 

這是ApplicationViewModel中第二個屬性的實現。

public Record SelectedRecord 
{ 
    get 
    { 
     return m_SelectedRecord; 
    } 
    set 
    { 
     m_SelectedRecord = value; 
     OnPropertyChanged("SelectedRecord"); 
    } 
} 

後來這個屬性會被替換。但是我應該做的是在調用生成新內容的函數(例如GenerateContent())的「UserControlViewModel」的屬性「SelectedRecord」和「Record」之間建立依賴關係。我如何才能使SelectedRecord屬性的更改更新UserControlViewModelRecord屬性以生成新內容?或者我的UserControlViewModel可以聽到OnPropertyChanged("SelectedRecord")生成自動新增內容?

+0

看看[ViewModelLocator(http://blog.roboblob.com/tag/viewmodellocator/) – 2012-02-05 19:52:26

+0

你應該在這裏使用Mediator模式(http://en.wikipedia.org/wiki/Mediator_pattern) – 2012-02-05 23:59:30

回答

3

一個簡單的解決方案是更新SelectedRecord屬性的setter。在這裏,您可以調用UserControlViewModel上的GenerateContent方法,並且如果需要的話,還可以在那裏設置SelectedRecord屬性。

或者,您的UserControlViewModel可以偵聽ApplicationVM上的PropertyChanged事件,但要這樣做UserControlViewModel將需要對ApplicationVM的引用。

最後,您可以使用事件系統在視圖模型之間進行通信。這將確保您的視圖模型可以很好地分離,但價格會增加複雜性。如果您有興趣,請查看Prism Event Aggregator上的文檔。

相關問題