我正在考虑使用PRISM(复合WPF指导/图书馆)构建应用程序。应用程序模块将垂直分区(即客户,供应商,销售订单等)。这仍然是相对简单的...我还有一个主要区域的Shell,所有的工作都会发生但现在我需要以下行为:我需要一个主菜单上的菜单,当每个选项被点击时(像客户,供应商等)我需要找到模块并将其加载到该区域(一次只有1个视图)?
是否有人知道此类行为的任何示例应用程序?所有样本都更专注于将所有模块加载到主shell上?我的菜单栏也应该是一个模块吗?
[更新]如何根据从菜单中选择的模块将模块注入某个区域?所有的例子都表明模块在初始化时将视图注入到区域中?如果在菜单上选择模块,我只需要注入视图吗?
答案 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);
所有人都应该走到一起! :)
注意:
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)