我具有以下設置:棱鏡:EventAggregator和MEF - EventAggregator
- 跨越 xaps /模塊的Silverlight應用程序分割
我使用MEF作爲DI框架連接 各個部分我的應用程序。
我有2個區域:
一(左一個)被填充有 列表視圖(例如客戶)
一(右側的一個)被填充有 的視圖含帶有我填充的 區域的選項卡控件(根據 選擇客戶) 另一個視圖包含帶區域的選項卡控件 。
右側結果:
要填充的tabcontrol我正在聽「客戶更改事件」第一層次 - (這偉大工程),當我拿到收到我填充事件與視圖第一級標籤面積:
Dim lReg As IRegion = Me.mRegionManager.Regions("FirstLevelTabReqion")
Dim lViewID As String = CommonDefinitions.Constants.BuildFirstLevelViewName(lUniqueID)
Dim lFirstLevelView FirstLevelView = TryCast(lReg.GetView(lRqViewID), FirstLevelView)
If lFirstLevelView Is Nothing Then
lFirstLevelView = New FirstLevelView()
Dim lRegMan1 As IRegionManager = lReg.Add(lFirstLevelView, lViewID, True)
lFirstLevelView.SetRegionManager(lRegMan1)
...
End If
注:在創建FirstLevelView我有一個CompositionInitializer.SatisfyImports
調用拋出,以確保FirstLevelView解析其ViewModel引用。
要獲得EventsAggregator的一個實例,在第二級別視圖模型我用:
<ImportingConstructor()>
Public Sub New(ByVal iEvAggregator As IEventAggregator)
EventAggregator = iEvAggregator
EventAggregator.GetEvent(Of DoStuffSecondLevel).Subscribe(AddressOf OnDoStuffSecondLevel, True)
End Sub
我的問題是,EventAggregator比如我在第二級視圖模型得到的是在第一級從EventAggregator情況不同所以如果我在第一級發佈DoStuffSecondLevel,它將不會被捕獲到第二級。
爲什麼我會得到2個不同的EventAggregator實例?
我該怎麼做才能在整個應用程序中共享同一個EventAggregator實例?
在此先感謝
我想補充一點,我遇到了同樣的問題。我想要一個解決方案,使用ComponentInitializer.SatisfyImports(this);我使用ComponentInitializer.SatisfyImports(...)',以便我可以new()我的其他ViewModels(所以我不用不必手動重置他們的狀態),這導致我使用SatisfyImports,因此我可以獲得我的服務,主要是EventAggregator。 – michael 2011-06-30 15:22:03
請檢查以下幾點:1.在配置MEF容器時,是否將CreationPolicy.NonShared的默認創建策略設置爲? 2.你的EventAggregator類是否有PartCreationPolicy屬性? 3.是否有可能爲SecondLevelViewModel創建單獨的CompositionContainer對象? – 2011-07-01 07:21:02