0

我正在考虑使用 PRISM(复合 WPF 指导/库)构建应用程序。应用程序模块将被垂直划分(即客户、供应商、销售订单等)。这仍然相对容易......我还有一个带有主要区域的Shell,所有工作都会发生,但现在我需要以下行为:我需要我的主Shell上的一个菜单,并且当每个选项都被点击时(像客户、供应商等)我需要找到模块并将其加载到区域中(一次只能查看 1 个视图)?

有人知道任何具有这种行为的示例应用程序吗?所有示例都更侧重于将所有模块加载到主 shell 上?我的菜单栏也应该是一个模块吗?

[更新]如何根据从菜单中选择的模块将模块注入区域?所有的例子都表明模块在初始化时将视图注入到区域中?如果在菜单上选择了模块,我只需要注入视图吗?

4

5 回答 5

4

是的,PRISM 会在这里为您提供帮助。

这里有很多值得一提的事情。

RE:棱镜适合我吗?

您可以按需加载模块。PRISM 具有在运行时加载模块的功能,因此在您的情况下,如果您使用 Shell 和 ModuleA 启动所述解决方案。然后,您的用户触发一个事件(即菜单选择),然后它可以允许您动态加载 ModuleB,然后将其注入游戏。不过要明确一点,你真的需要坐下来做功课,因为你需要确保 ModuleB 对其他模块等没有任何依赖(通常使用基础设施模块是明智的。我使用过技术我有一个模块清单,我在 XML 中查找列出了它的绝对依赖项,然后我确保首先加载它们,然后加载 ModuleB)。

请参阅通过 PRISM 帮助文档(开发活动)按需加载模块。还查找准备远程下载的模块

RE:在运行时注入视图

通过菜单将视图注入区域是访问 IRegionManager 然后添加它的简单案例。为此,请确保在您使用的上述 ViewModel/Presenter/Controller 的构造函数中:

MyConstructor(IRegionManager regionManager, IUnityContainer container) 

与 PRISM 一样,您几乎可以将任何您想要的对象添加到您的构造中,并且 PRISM 将确保它按时按预算到达那里(呵呵)。

从那里开始,您将采用添加视图的正常方法......例如:

IMyViewInstance myViewInstance = this.container.Resolve<IMyViewInstance>();
IRegion myRegion = this.regionManager.Regions["YourRegion"];
myRegion.add(myViewInstance);
myRegion.Active(myViewInstance);

所有人都应该团结起来!:)

笔记:

  • 确保在 Construct 中设置了对容器和 regionManager 的本地引用(this.container = container 等)。
  • 如果您不确定上述命名空间存在的位置,例如右键单击 IUnityContainer 并让 Visual Studio 解决它(右键单击菜单)
  • 将添加逻辑放入您的菜单事件中,或者使用中心方法 - 无论哪种方式让您的头发向后吹:)

Scott Barnes - 富平台产品经理 - Microsoft。

于 2009-05-19T06:18:57.760 回答
3

刚刚在 dnrTV的 Prism 上看完了 Brian Noyes 。这回答了我所有的问题......

于 2008-10-08T14:57:18.543 回答
0

目前尚不清楚您所说的“找到模块并将其加载到该区域”是什么意思。您可以加载模块的视图并将其添加到 shell。Composite UI 应用程序块和 CompositeWPF 构建在 IoC 模式之上。这意味着您的模块应该将它们的菜单项注入 shell 的菜单条或订阅由 shell 生成的事件。

于 2008-09-08T08:21:07.967 回答
0

您可以将主要区域设置为 ContentControl,这样一次只有 1 个视图处于活动状态。您还可以“按需”加载您的模块。有一个快速入门向您展示如何执行此操作。您还应该记住,如果模块已经初始化过一次,第二次初始化它不会在模块上执行 Initialize() 方法。可能有用的是,当您单击菜单时,这将按需加载模块(它不会加载视图),然后您可以通过 EventAggregator 触发事件,因此模块现在可以添加视图(使用命名的不添加两次视图的方法)和激活视图(这将确保视图在该区域中显示)。

希望这会有所帮助,朱利安

于 2008-10-04T02:49:49.873 回答
-3

为了节省您的时间,请查看John Papa 的 Presentation Framework 文章。如果你有 3rd object( Screen Conductor) 来处理你的屏幕显示或隐藏区域会更容易。

于 2010-07-23T19:50:29.807 回答