我正在處理一個Surface WPF項目,我們嘗試實現MVVM模式。在這個項目中,我們正在構建一些我們綁定到不同視圖模型的自定義控件。多個viewmodel互相交互
例如,我們有一個設置控件,它有一個設置viewmodel,我們有一個mainviewmodel,它是「整體」視圖模型。
在我們的surfacewindows.xaml頁面中,我們通過使用mvvm-light中的viewmodel定位器將datacontext設置爲主視圖模型。同樣在我們的surfacewindow.xaml中,我們添加了我們的設置控件,並在控件上設置了datacontext設置viewmodel。
現在我們需要兩個視圖模型來互相交互:目前的情況是我們需要設置設置控件的可見性。我們在主視圖模型上有一個屬性,它是一個布爾型(IsSettingsControlVisible),通過使用轉換器將布爾轉換爲可見性對象,該屬性綁定到控件Visibility屬性。
現在的問題出現在我們需要通過點擊設置控件上的關閉按鈕將可見性設置爲不可見時。因爲我們已將控件上的datacontext設置爲設置viewmodel,所以我們無法訪問mainviewmodel。
我們到目前爲止想過的是將設置viewmodel作爲屬性添加到mainviewmodel並從設置控件中刪除datacontext。在settingscontrol中,我們將使用作爲SettingsProperty.Property的綁定。我們也可以從設置控制中訪問主視圖模型。那有意義嗎?有沒有更好的方式來進行這種交互?
我真的很想聽聽你如何讓這些互動發生的想法。
我會看看溫莎城堡,看看能不能幫助我。正如我所理解的,你正確地使用了「main」視圖模型上的「sub」viewmodel來進行通信。 – ChristiaanV
沒錯。所以我的整個視圖模型圖獨立於視圖創建。我有選擇然後構建圖表的方式,以便視圖模型可以很容易溝通,或者我會使用MVVM-Light的Messenger類,這對您來說可能更好。 – Tim
mvvm使者看起來像是我們完美的解決方案。會試一試。 – ChristiaanV