我是 MVVM 的新手,并决定在我当前的项目中使用 Caliburn 和 MEF。该项目基本上是一个基于所选产品托管屏幕和工作流的框架。当用户选择产品时,我需要将所有当前屏幕换成与所选产品相关的屏幕。显然,这必须以模块化方式完成,以便可以根据需要插入或移除产品及其相关屏幕。
我不认为这超出了 Caliburn 的范围,但我不确定如何处理它。谁能提供一些关于如何实现这一点的见解?
提前致谢。
我是 MVVM 的新手,并决定在我当前的项目中使用 Caliburn 和 MEF。该项目基本上是一个基于所选产品托管屏幕和工作流的框架。当用户选择产品时,我需要将所有当前屏幕换成与所选产品相关的屏幕。显然,这必须以模块化方式完成,以便可以根据需要插入或移除产品及其相关屏幕。
我不认为这超出了 Caliburn 的范围,但我不确定如何处理它。谁能提供一些关于如何实现这一点的见解?
提前致谢。
有几种方法可以做到这一点,具体取决于每种产品类型是否具有独特的导航,或者每种产品之间是否存在共性。
例如,您可能有一个Product
实现IProduct
接口的类型(标有InheritedExport
属性)。这些产品类型中的每一个也可以从Conductor
类型派生,并且可以包含它们需要显示的屏幕(项目)列表。
(ShellViewModel
可以是类型)可以维护由 MEF 导入的 ' 的Conductor<IScreen>.Collection.OneActive
集合。IProduct
导入完成后,此集合可用于填充ShellViewModel
的Items
集合,该集合绑定到产品的 ListBox 以供用户选择。
当用户从 ListBox 中进行选择时,ShellViewModel
可以调用ActivateItem
所选产品。
事实上,如果你给你的 ListBox 命名Items
,那么ActiveItem
当你在列表中选择一个项目时,Caliburn.Micro 会自动设置它,因此活动项目将被设置到适当的产品屏幕。
您的 ShellView.xaml 将包含一个ContentControl
名称ActiveItem
以显示当前选定的产品(导体)视图。