2012-02-25 170 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