【问题标题】:PRISM: Nested regions in a regionPRISM:区域中的嵌套区域
【发布时间】:2012-02-25 18:43:30
【问题描述】:

该项目基于 PRISM。

我在 Shell 的 TabControl 中有一个主要区域。

        <!-- Main Region : A tab control -->
        <TabControl prism:RegionManager.RegionName="MainRegion" >
        </TabControl>

然后,我有几个Modules,它们都包含相同的视图。并且必须添加到选项卡控制区域。

|_ModuleA
| |_ViewA
|
|_ModuleB
  |_ViewB

请检查图像。在标签ModuleA中,它显示在标签内容ViewA的左侧,右侧是通用视图,因为所有标签必须显示相同的UI。

我该怎么做?

【问题讨论】:

  • 为什么右边的公共视图一定要在tab控制区?为什么不在你的 shell 内部创建一个单独的区域,但在选项卡控制区域之外创建一个单独的区域?
  • 因为在实际应用中,当在ViewA中选择一个item时,会在普通View中显示item的详细信息。我的意思是,每个模块都会维护项目的详细信息。

标签: c# wpf module prism region


【解决方案1】:

我猜“lecrank”已经回答了这个问题。在其他 Region 或 View 中添加 Region 没有问题。我在项目中做了什么:

  • 每个模块都会在构造函数中接收 IRegionManager 和 IEventAggregator 对象的副本(我使用 MEF)
  • Initialize() 函数中,每个模块都使用自己的视图等注册自己的区域等...
  • 每当事件或程序流应传递给另一个模块(例如)时,我只需 .Publish() 预定义事件 (CompositePresentationEvent) 和参数。
  • Shell 本身只是一个空模板,仅定义了几个“全局”区域(如您的场景中的 TabControl),并且显示在其上的所有内容都来自不同的模块视图,而不是在 Shell 类中实现,甚至在包含 Shell 的项目中也没有实现。

因此,您可以随意在其他模块中定义和实现区域和视图 - 只需将 IRegionManager 和 IEventAggregator 实例传递给 Module 类即可。

【讨论】:

  • 你能告诉我这种情况但使用 UNITY CONTAINER 吗?我忘了提!我正在注册我的视图,但由于这些区域已经存在,所以它会引发错误
【解决方案2】:

您的问题有点奇怪,但如果我没记错的话,您应该寻找“综合演示者”。向可以显示其他视图的区域管理器注册新区域的演示者。你也可以使一个区域在本地范围内。有关更多信息,请参阅http://msdn.microsoft.com/en-us/magazine/cc785479.aspx

在compositewpf codeplex 网站上找到Prism 答案的好地方,可能有人问同样的问题:http://compositewpf.codeplex.com/discussions/273120

【讨论】:

  • MSDN 杂志不再有效。你能告诉我你在哪个问题上找到了这篇文章吗?
  • 我的答案是 6 年前的,无论如何都不会作为答案进行营销。
  • 嗯,好吧,如果你仍然知道它是哪一个,我会为这个问题投赞成票。谷歌搜索“复合演示者 MSDN 杂志”的结果并不多。
猜你喜欢
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2017-11-01
  • 2012-07-25
  • 2010-09-16
  • 2016-12-18
相关资源
最近更新 更多