PRISM会帮忙吗?

时间:2008-09-08 08:14:33

标签: wpf prism cal cag

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

是否有人知道此类行为的任何示例应用程序?所有样本都更专注于将所有模块加载到主shell上?我的菜单栏也应该是一个模块吗?

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

5 个答案:

答案 0 :(得分:4)

是的,PRISM会帮助你。

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

  

RE:棱镜适合我吗?

您可以按需加载模块。 PRISM具有在RunTime加载模块的功能,因此在您的情况下,如果使用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(this.container = container etc)设置容器和regionManager的本地引用。
  • 如果您不确定上述命名空间的位置,请右键单击IUnityContainer,然后让Visual Studio重新绑定它(右键菜单)
  • 将添加逻辑放入您的菜单事件或使用中央方法 - 无论哪个吹回你的头发:)

Scott Barnes - Rich Platforms产品经理 - Microsoft。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

希望这有帮助, 儒略

答案 4 :(得分:-3)