我是MVVM的新手,因此决定在当前项目中使用Caliburn和MEF。该项目基本上是一个用于基于选定产品托管屏幕和工作流的框架。用户选择产品时,我需要将所有当前屏幕换成与所选产品相关的屏幕。显然,这必须以模块化方式完成,以便可以根据需要插入或卸下产品及其关联的屏幕。
我认为这不超出Caliburn的范围,但是我不确定如何实现。谁能提供一些有关如何实现此目标的见解?
提前致谢。
最佳答案
您可以通过几种方法来执行此操作,这取决于每种产品类型是否具有唯一的导航,或者每种产品之间是否存在通用性。
例如,您可能具有Product
类型,该类型实现了IProduct
接口(interface)(标有InheritedExport
属性)。这些产品类型中的每一个也可以源自Conductor
类型,并且可以包含它们需要显示的屏幕(项目)列表。ShellViewModel
(可以是Conductor<IScreen>.Collection.OneActive
类型)可以维护MEF导入的IProduct
的集合。导入完成后,可以使用此集合来填充ShellViewModel
的Items
集合,该集合绑定(bind)到产品的列表框,供用户选择。
当用户从列表框进行选择时,ShellViewModel
可以在所选产品上调用ActivateItem
。
实际上,如果将ListBox命名为Items
,那么在列表中选择一个项目时,Caliburn.Micro会自动设置ActiveItem
,因此 Activity 项目将设置为适当的产品屏幕。
您的ShellView.xaml将包含名称为ContentControl
的ActiveItem
,以显示当前选定的产品(导体) View 。
关于c# - MVVM和Caliburn : Replacing All Screens?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5539658/