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