1

我是 MVVM 的新手,并决定在我当前的项目中使用 Caliburn 和 MEF。该项目基本上是一个基于所选产品托管屏幕和工作流的框架。当用户选择产品时,我需要将所有当前屏幕换成与所选产品相关的屏幕。显然,这必须以模块化方式完成,以便可以根据需要插入或移除产品及其相关屏幕。

我不认为这超出了 Caliburn 的范围,但我不确定如何处理它。谁能提供一些关于如何实现这一点的见解?

提前致谢。

4

1 回答 1

1

有几种方法可以做到这一点,具体取决于每种产品类型是否具有独特的导航,或者每种产品之间是否存在共性。

例如,您可能有一个Product实现IProduct接口的类型(标有InheritedExport属性)。这些产品类型中的每一个也可以从Conductor类型派生,并且可以包含它们需要显示的屏幕(项目)列表。

ShellViewModel可以是类型)可以维护由 MEF 导入的 ' 的Conductor<IScreen>.Collection.OneActive集合。IProduct导入完成后,此集合可用于填充ShellViewModelItems集合,该集合绑定到产品的 ListBox 以供用户选择。

当用户从 ListBox 中进行选择时,ShellViewModel 可以调用ActivateItem所选产品。

事实上,如果你给你的 ListBox 命名Items,那么ActiveItem当你在列表中选择一个项目时,Caliburn.Micro 会自动设置它,因此活动项目将被设置到适当的产品屏幕。

您的 ShellView.xaml 将包含一个ContentControl名称ActiveItem以显示当前选定的产品(导体)视图。

于 2011-04-04T22:01:13.927 回答