我是MVVM的新手,決定在當前的項目中使用Caliburn和MEF。該項目基本上是一個基於選定產品託管屏幕和工作流程的框架。當用戶選擇產品時,我需要將所有當前屏幕換出與選定產品相關的屏幕。顯然,這必須以模塊化方式完成,以便產品及其相關屏幕可以根據需要插入或移除。MVVM和Caliburn:更換所有屏幕?
我不認爲這超出了Caliburn的範圍,但我不知道如何處理它。任何人都可以提供一些有關如何完成這一任務的見解?
在此先感謝。
我是MVVM的新手,決定在當前的項目中使用Caliburn和MEF。該項目基本上是一個基於選定產品託管屏幕和工作流程的框架。當用戶選擇產品時,我需要將所有當前屏幕換出與選定產品相關的屏幕。顯然,這必須以模塊化方式完成,以便產品及其相關屏幕可以根據需要插入或移除。MVVM和Caliburn:更換所有屏幕?
我不認爲這超出了Caliburn的範圍,但我不知道如何處理它。任何人都可以提供一些有關如何完成這一任務的見解?
在此先感謝。
有幾種方法可以做到這一點,具體取決於每種產品類型是否具有獨特的導航,或者每種產品之間是否具有共性。
例如,您可以使用Product
類型,該類型實現IProduct
接口(標記爲InheritedExport
屬性)。這些產品類型中的每一種都可能源自Conductor
類型,並且可能包含他們需要顯示的屏幕(項目)列表。
ShellViewModel
(可以是Conductor<IScreen>.Collection.OneActive
類型)可以維護由MEF導入的IProduct
的集合。導入完成後,此集合可用於填充ShellViewModel
的Items
集合,該集合綁定到供用戶選擇的產品列表框。
當用戶從列表框中進行選擇時,ShellViewModel
可以在所選產品上調用ActivateItem
。
事實上,如果您給列表框命名爲Items
,那麼當您在列表中選擇一個項目時,Caliburn.Micro將自動設置ActiveItem
,因此活動項目將被設置爲相應的產品屏幕。
您的ShellView.xaml將包含一個ContentControl
,其名稱爲ActiveItem
以顯示當前選定的產品(導體)視圖。
感謝大綱,我認爲它可能是這樣的。 – grefly 2011-04-05 13:45:31