2012-02-25 414 views
1

该项目基于PRISM。PRISM:区域内的嵌套区域

我在壳牌的TabControl有一个主要区域。

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

然后,我有几个Modules其中所有人都包含相同的意见。并且必须添加到选项卡控制区域。

|_ModuleA 
| |_ViewA 
| 
|_ModuleB 
    |_ViewB 

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

enter image description here

我怎样才能做到这一点?

+1

为什么右边的共同看法必须在标签控制区域?为什么不在shell中创建一个单独的区域,而是在选项卡控制区域之外? – lecrank 2012-02-26 02:40:40

+0

因为在实际的应用程序中,当在ViewA中选择一个项目时,它会在常见的View中显示项目详细信息。我的意思是,每个模块都会保留项目细节。 – 2012-02-26 16:34:27

回答

3

我猜'lecrank'已经回答了这个问题。在其他区域或视图内添加区域没有任何问题。我在我的项目做了什么:

  • 每个模块接收IRegionManager和IEventAggregator对象的构造函数(我使用MEF)的副本
  • Initialize()功能每个模块注册它与它自己的地区自己的观点,等等等等...
  • 无论何时应将事件或程序流传递给另一个模块(例如),那么我只需使用参数.Publish()预定义事件(CompositePresentationEvent)。
  • Shell itslef它只是空的模板,它定义了几个'全局'区域(就像场景中的TabControl),显示的所有内容都来自不同的模块视图,并且不在Shell类或甚至包含项目的Shell中实现。

因此,随意在另一个模块中定义和实现区域和视图 - 只需将IRegionManager和IEventAggregator实例传递到Module类中即可。

+1

你能告诉我这种情况,但使用UNITY CONTAINER吗?我忘了提及它! 我registring我的意见,但它引发我错误,因为该地区已经存在 – 2012-03-02 20:34:18

1

你的问题有点奇怪,但如果我没有弄错你应该找'复合主持人'。演示者向区域管理器注册一个新的区域,其中可以显示其他视图。 U也可以在本地范围内创建一个区域。对于一些详细信息,请参阅http://msdn.microsoft.com/en-us/magazine/cc785479.aspx

的好去处找到答案的棱镜是在compositewpf的CodePlex网站上,有人问也许同样的问题:http://compositewpf.codeplex.com/discussions/273120

+0

MSDN杂志不再起作用。你能告诉我你找到了哪篇文章吗? – 2018-01-24 18:23:02

+0

我的答案是从6年前开始的,从来没有市场回答。 – rfcdejong 2018-01-29 09:41:54

+0

Ehm,如果你仍然知道它是哪一个,那么我会交换一个问题的upvote。 Google搜索“复合主持人MSDN杂志”的收益并不高。 – 2018-01-29 15:54:54