在this post我概述了MVVM Light視圖模型中通常用於顯示對話框的方法。
MVVM Light沒有區域的概念,也沒有強制您使用一個特定的範例來解決問題。這給你留下了很多自由,然而,相反,這也意味着你必須自己做更多。
如果您需要區域和插件,也許使用更大的框架 - 比如棱鏡,Caliburn或Ocean(部分) - 可能是更好的選擇。如果你一定要MVVM光,需要此功能,你將不得不自己創建它 - 因此在名稱「光」的一部分:-)
編輯
你(Sergey的)評論讓我思考,所以我出去四處看了看,找到了適合你需要的東西。
Mike Hamilton實現了基於MVVM Light的導體/屏幕邏輯。這些樣本不使用ViewModelLocator
,但我看不出有什麼理由不能改變(儘管時間允許,還沒有嘗試過)。但是,這種方法看起來很有希望注意:它可能僅適用於WPF - 樣本只是WPF,並且沒有導航。
源代碼中的牀位套餐也可以作爲NuGet package。
即使您想要推出自己的實現,示例,源代碼和博客帖子也爲您提供了一個很好的起點。
如果您的目標是WP7,Laurent Buginion和Jesse Liberty展示瞭如何實現NavigationService
- 這也適用於此類別。
由於Silverlight和WP7共享相當多的通用性,所以NavigationService
方法可以轉換爲與Silverlight一起工作 - 實際上我是在我編寫的SL應用程序中完成的。
Jay Kimble提供了一個實現Silverlight另一種方法的模板。
至於什麼是「主導」模式,我認爲Siverlight/WP 7是NavigationService
模式,對WPF來說 - 它確實不是「主導」模式,然而,有些競爭者(顯示出來)。
那麼,Caliburn Micro是我的選擇框架 - 但我也喜歡嘗試ViewFirst模型,其中MVVMLight是冠軍。我想如果我必須自己實現它,我只需註冊我的視圖和主機,並從ViewModel使用類似viewService的東西。激活(myView,myHost) –
@SergeyAldoukhov:請參閱編輯,時間允許我將在博客文章中提供我的示例。 – AxelEckenberger
謝謝,邁克漢密爾頓的文章中的方法可能是最合適的。順便說一句,我想到了另一個 - 你可以在設計時將你的屏幕(或屏幕)包含在主機中,只隱藏,並通過可以通過某種服務控制的StateManager來操縱屏幕可視性。在這種情況下,您的視圖模型會被急切地實例化,但它們可以檢測其視圖的可見性並僅在顯示時才執行實際工作。 –