我对应用程序有一个想法,我不确定是否可能,我很感激您的见解:
我希望ToolBar
中有Shell
,其中加载的每个模块都可以添加其按钮。 Shell
还将包含显示模块相关视图的内容区域
有些模块共享相同的区域,Prism中是否有一种机制可以帮助删除当前无关的按钮?
例如,如果ModuleA
添加了“获取帮助”按钮,并且ModuleB
添加了“发送消息”按钮,并且它们共享相同的区域(在给定时间只能看到其中一个),那么{{1}可见,我希望暂时删除“发送消息”按钮 - 或者至少取消激活 - 来自ModuleA
(但在激活ToolBar
视图时返回相同位置)。
使用ModuleB
时,此方法是否合适?
感谢。
答案 0 :(得分:1)
MVVM和prism是可能的。我正在做类似的事情,我有一个按钮交换机,它将从列表中填充。每个按钮代表一个表单,单击该按钮显然会打开该表单。我创建了每个表单实现的ISwitchboard接口,希望成为Switchboard的一部分。因此,每个ISwitchboard接口项都实现了ShowDialogForm和WPF命令等。
这篇文章解释你需要做的所有细节真是太麻烦了。但是,这些是我的代码工作的基本原则:
在我的引导程序中,我重写了GetModuleCatelog()方法以添加我想要的任何模块。每个模块代表一个应用程序(表单),它将从交换机打开,并且必须从我创建的接口继承,因此视图模型知道如何打开它或是否在需要时显示它。您可能不需要将模块用于您想要的,而是您的设计选择。也就是说,如果您的按钮将打开应用程序,您将需要模块。
我的视图模型然后公开了一个使用我的自定义界面的可用模块列表,这些模块是使用prism添加的。我可以通过IModuleCatalog接口获取模块列表,并将其传递给VM的构造函数。该列表是一个可观察的集合。如果我想实现用户权限,那么如果我愿意,我可以用这种方式限制列表。
我的视图有一个itemscontrol,它绑定到交换机列表。我可以从那里向他们展示我的愿望。我为列表中的每个项目创建了一个项目模板,它被绑定到SwitchboardItem接口公开的Command。