我是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