Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
棱镜WPF(MEF)-另一个壳中的壳_Wpf_Prism - Fatal编程技术网

棱镜WPF(MEF)-另一个壳中的壳

棱镜WPF(MEF)-另一个壳中的壳,wpf,prism,Wpf,Prism,在我的应用程序中,我有几个重要的逻辑组件,我计划将它们创建为具有自己模块的不同棱柱壳。尽管它们目前可以是独立的模块,但我们可能会在稍后阶段收到一个请求,要求在一个大表单中启动它们。因此,如果发生这种情况,我将不得不启动棱镜“壳”,我现在将从更大的壳中编写。这可能吗?我可以在另一个shell中加载一个shell吗(可能类似于每个内部shell的选项卡)。如果我不能,什么是一般的替代方案或任何设计建议,我现在可以考虑。我仍处于应用程序的设计阶段,如果PRISM一旦实现后变得非常僵硬,我可以离开它。为

在我的应用程序中,我有几个重要的逻辑组件,我计划将它们创建为具有自己模块的不同棱柱壳。尽管它们目前可以是独立的模块,但我们可能会在稍后阶段收到一个请求,要求在一个大表单中启动它们。因此,如果发生这种情况,我将不得不启动棱镜“壳”,我现在将从更大的壳中编写。这可能吗?我可以在另一个shell中加载一个shell吗(可能类似于每个内部shell的选项卡)。如果我不能,什么是一般的替代方案或任何设计建议,我现在可以考虑。我仍处于应用程序的设计阶段,如果PRISM一旦实现后变得非常僵硬,我可以离开它。

为了在单独的窗口上加载每个Shell,您可以查看以下帖子,其中显示了创建多Shell应用程序的PRISM-v2中的一个示例。但是,将其应用于棱镜4将非常简单:

通过为每个模块使用一个引导程序将来将更容易扩展它们之间的通信。您可能还需要在每个窗口上设置更新RegionManager,以正确注册每个外壳的每个区域,如示例中所述

除了区域管理器,Prism
提供的其他服务,如事件聚合器模块管理器,独立于应用程序的UI/区域,因此,您应该能够在所有窗口中毫无问题地使用它们

然而,如果您要在单独的选项卡上加载每个Shell,您可以在主Shell应用程序上将选项卡区域定义为选项卡控件,然后在选项卡区域上注册并加载每个内部Shell,就像它们是简单的视图一样。在每个模块的Initialize()方法上注册视图将在初始化完成后加载每个视图

有关管理模块区域的更多信息,您可能会发现以下MSDN Prism Guide章节非常有用:

我希望这对你有帮助


问候。

为了给您更好的支持,如果您能帮助我更好地理解您描述的场景,我将不胜感激。当你谈论不同的shell时,你是指在不同的窗口中启动它们吗?或者您只需为每个壳使用一个选项卡?如果是最后一个选项,shell的行为与在每个单独的选项卡区域上使用视图有什么不同?您好,谢谢您的回复。目前,我计划为每个组件使用不同的窗口。但我担心以后可能会有人要求我把这些单独的窗口改成一个大窗口,将所有不同的组件都放在标签内。谢谢你,帕德马亚。不过我还有一个问题:这些壳是否完全独立?我的意思是,不同的外壳和逻辑模块会在它们之间通信吗?或者它们的行为会像单独的应用程序一样吗?主要是,我想知道您是否会为每个Shell及其模块配备一个单独的引导程序,然后您会将所有内容统一到一个主引导程序中,我担心这并不是很直观地完成的。我们不确定最终的应用程序会是什么样子。我们现在想发布独立的模块(带有它们自己的shell),如果我们知道有很多东西应该共享,我们将把它们放在一个shell中。目前我们没有任何东西可以在模块之间共享。