【问题标题】:Prism - can deactivating a view affect on other module parts?棱镜 - 停用视图会影响其他模块部件吗?
【发布时间】:2012-01-10 09:32:02
【问题描述】:

我有一个应用程序的想法,但我不确定是否可行,非常感谢您的见解:

我想在我的Shell 中有一个ToolBar,每个加载的模块都可以添加它的按钮。 Shell 还将具有显示模块相关视图的内容区域。
不过,有些模块共享相同的区域,Prism 中是否有一种机制可以帮助删除当前不相关的按钮?
例如,如果ModuleA 添加了“获取帮助”按钮,ModuleB 添加了“发送消息”按钮并且它们共享相同的区域(在给定时间只有一个可见),当ModuleA 可见时,我'希望“发送消息”按钮暂时从 ToolBar 中删除 - 或至少停用 - (但在 ModuleB 的视图被激活时回到相同的位置)。
使用MVVM 时这种方法是否合适?

谢谢。

【问题讨论】:

    标签: prism modularity


    【解决方案1】:

    MVVM 和棱镜可以实现。我正在做类似的事情,我有一个按钮开关板,它将从列表中填充。每个按钮代表一个表单,单击该按钮显然会打开该表单。我创建了 ISwitchboard 接口,每个表单都实现了它希望成为 Switchboard 的一部分。因此,每个 ISwitchboard 接口项都实现了 ShowDialogForm,以及 WPF 命令等。

    这篇文章解释你需要做的所有细节太麻烦了。但是,这些是我的代码工作的基本原则:

    1. 在我的引导程序中,我重写了 GetModuleCatelog() 方法来添加我想要的任何模块。每个模块代表一个应用程序(表单),它将从交换机打开,并且必须从我创建的界面继承,以便视图模型知道如何打开它或是否在需要时显示它。您可能不需要将模块用于您想要的,但这是您的设计选择。也就是说,如果您的按钮将打开应用程序,您将需要模块。

    2. 然后,我的视图模型会公开一个可用模块列表,这些模块使用我使用 prism 添加的自定义界面。我可以通过传递给 VM 构造函数的 IModuleCatalog 接口获取模块列表。该列表是一个可观察的集合。如果我想实现用户权限,那么我可以根据需要以这种方式限制列表。

    3. 然后我的视图有一个绑定到交换机列表的项目控件。我可以从那里向他们展示我希望的方式。我为列表中的每个项目创建了一个项目模板,并绑定到 SwitchboardItem 接口公开的命令。

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 2012-01-04
      相关资源
      最近更新 更多