2011-10-14 30 views
1

「屏幕激活」我的意思是一個concept from Caliburn Micro,當你想顯示的東西沒有被佔用的區域或切換一個視圖與另一個。在Caliburn Micro中,所有這些都是通過實例化並激活另一個ViewModel從ViewModel的方法完成的。在我看來,在MVVM Light中,考慮到它的「View First」方法,爲了實現這一點,您需要使用後面的代碼,並且只需要用其他視圖切換視圖主機的內容。MVVM Light屏幕激活 - 建議的模式是什麼?

我想知道這是否可以在沒有代碼隱藏的情況下完成,以及這項任務是否存在主導模式。

回答

1

this post我概述了MVVM Light視圖模型中通常用於顯示對話框的方法。

MVVM Light沒有區域的概念,也沒有強制您使用一個特定的範例來解決問題。這給你留下了很多自由,然而,相反,這也意味着你必須自己做更多。

如果您需要區域和插件,也許使用更大的框架 - 比如棱鏡,Caliburn或Ocean(部分) - 可能是更好的選擇。如果你一定要MVVM光,需要此功能,你將不得不自己創建它 - 因此在名稱「光」的一部分:-)

編輯

你(Sergey的)評論讓我思考,所以我出去四處看了看,找到了適合你需要的東西。

Mike Hamilton實現了基於MVVM Light的導體/屏幕邏輯。這些樣本不使用ViewModelLocator,但我看不出有什麼理由不能改變(儘管時間允許,還沒有嘗試過)。但是,這種方法看起來很有希望注意:它可能僅適用於WPF - 樣本只是WPF,並且沒有導航。

源代碼中的牀位套餐也可以作爲NuGet package

即使您想要推出自己的實現,示例,源代碼和博客帖子也爲您提供了一個很好的起點。

如果您的目標是WP7,Laurent BuginionJesse Liberty展示瞭如何實現NavigationService - 這也適用於此類別。

由於Silverlight和WP7共享相當多的通用性,所以NavigationService方法可以轉換爲與Silverlight一起工作 - 實際上我是在我編寫的SL應用程序中完成的。

Jay Kimble提供了一個實現Silverlight另一種方法的模板。

至於什麼是「主導」模式,我認爲Siverlight/WP 7是NavigationService模式,對WPF來說 - 它確實不是「主導」模式,然而,有些競爭者(顯示出來)。

+0

那麼,Caliburn Micro是我的選擇框架 - 但我也喜歡嘗試ViewFirst模型,其中MVVMLight是冠軍。我想如果我必須自己實現它,我只需註冊我的視圖和主機,並從ViewModel使用類似viewService的東西。激活(myView,myHost) –

+0

@SergeyAldoukhov:請參閱編輯,時間允許我將在博客文章中提供我的示例。 – AxelEckenberger

+0

謝謝,邁克漢密爾頓的文章中的方法可能是最合適的。順便說一句,我想到了另一個 - 你可以在設計時將你的屏幕(或屏幕)包含在主機中,只隱藏,並通過可以通過某種服務控制的StateManager來操縱屏幕可視性。在這種情況下,您的視圖模型會被急切地實例化,但它們可以檢測其視圖的可見性並僅在顯示時才執行實際工作。 –