2011-05-19 75 views
1

HI,MVVMLight - 視圖模型引用了其他的ViewModels

我使用MVVMLight,我想一個特定的VM引用到另一個虛擬機的性能。目前,我使用ViewModelLocator.SomeViewModelStatic來做到這一點。有時候,我還想使用另一種視圖模型的方法。並且還使用ViewModelLocator.SomeViewModelStatic來使用其他ViewModels的方法。

這是ViewModels之間正確的通信方式嗎?

回答

0

在這種情況下,我會加入控制反轉容器到應用(AutofacNinject甚至MEF(如果你熟悉吧))和所有的ViewModels內註冊開始(你可以做到這一點手動或相同的IoC容器可以在組件中尋找特定的類)和服務。然後,我將實現ViewModelLocator與IoC一起工作,ViewModels將由其創建(然後,每個依賴項都將通過依賴注入來解決,並且所有您必須擔心的是在IoC中註冊所有內容)

By使用IoC,你也可以使用工廠方法,它可以在ViewModels中爲你創建實例。

+0

我想會使用這種方法...你有一個示例ViewModels與其他ViewModels進行通信的示例嗎? – icube 2011-05-19 13:35:29

+0

我沒有一個示例,但只需將一個ViewModel傳遞給另一個。當然如果你的通訊比較複雜,你可以使用消息(如:http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx)或事件聚合器(如Caliburn Micro:http://iserialized.com/getting-started-with-caliburn/) – 2011-05-19 15:26:01

1

有時我會構建一個VM的樹。例如:我通過將Person和Hobbies VM添加到PersonH​​obbies VM來創建PersonH​​obbies VM。這個類將擁有跨越其他虛擬機的所有命令。

我不願意將Hobbies VM鏈接到Person VM(或反向),因爲在沒有Person VM(或反向)的情況下使用Hobbies VM會變得更加困難。

同樣我創建視圖:在這個例子中,我可以爲Person和Hobbies創建視圖,並在構建PersonH​​obbies視圖時使用這些視圖。

相關問題