我有一個嵌套WPF UserControl的UI,每個都有自己的視圖模型。視圖(XAML)層次結構的一種簡單的情況下將是:撰寫WPF視圖和MVVM視圖模型
MainWindow
|-> Logical group
|-> Logical control
|-> Second logical group
|-> Third logical group
|-> Logical control
每個XAML視圖都有一個ViewModel它封裝交互邏輯。我的問題是關於從父視圖模型到子視圖模型的ViewModel狀態。
例如,MainWindow
中的用戶交互可以在MainWindowViewModel
中設置CurrentlySelectedGroup
變量。我需要知道LogicalControlViewModel
裏面有什麼值。
我正在考慮這樣做的兩種主要方式。首先,我可以播放一個事件DispatchGroupSelected
,然後在LogicalControlViewModel
內部指定一個代表作爲該事件的監聽者。第二,我可以在LogicalControlViewModel
裏面Bind
到的CurrentlySelectedGroup
屬性。
我的第一個直覺是使用事件在父視圖模型和子視圖模型之間進行通信。我認爲綁定最好保持在View Model和View之間。直到現在的事件已被用於我的ViewModel和命令之間的通信。如果還有另一個可能的方向,那就更好了,我很樂意聽到它。
當我說我正在考慮廣播事件時,我實際上正在考慮沿着消息總線的方向。我有一個單獨的Broadcaster類,它有一個委託列表,一個事件列表和一個DispatchEvent調用列表。我使用Ninject將廣播器注入到所有View Models中。到目前爲止,廣播公司主要用於註冊觀看模型以收聽命令的結果。我已經重新使用該中央廣播公司在視圖模型之間進行通信。我認爲這對我的小應用來說足夠乾淨,儘管我會考慮在較大的應用上爲View Models編寫特定的廣播器 – 2012-01-11 19:21:49