私は次の設定をしています:
- xaps/モジュールに分割された Silverlight アプリ
MEF を DI フレームワークとして使用して、アプリケーションのさまざまな部分を接続します。
私は2つの地域を持っています:
1 つ (左のもの) には、リスト ビュー (例: 顧客) が取り込まれます。
1 つ (右のもの) には、領域を持つタブ コントロールを含む別のビューを (選択した顧客に応じて) 領域を持つタブ コントロールを含むビューが取り込まれます。
右側の結果:
最初のレベルのタブコントロールを設定するために、「顧客変更イベント」をリッスンしています-(これはうまく機能します)。イベントを受信すると、最初のレベルのタブ領域にビューを設定します:
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 を作成するときは、FirstLevelView がCompositionInitializer.SatisfyImports
その ViewModel 参照を解決することを確認するために、呼び出しをスローする必要があります。
SecondLevel ViewModel で EventsAggregator のインスタンスを取得するには、次を使用します。
<ImportingConstructor()>
Public Sub New(ByVal iEvAggregator As IEventAggregator)
EventAggregator = iEvAggregator
EventAggregator.GetEvent(Of DoStuffSecondLevel).Subscribe(AddressOf OnDoStuffSecondLevel, True)
End Sub
私の問題は、第 2 レベルのビュー モデルで取得した EventAggregator インスタンスが第 1 レベルの EventAggregator インスタンスと異なるため、第 1 レベルで DoStuffSecondLevel を公開すると、第 2 レベルでキャッチされないことです。
EventAggregator の 2 つの異なるインスタンスを取得するのはなぜですか?
アプリケーション全体で EventAggregator の同じインスタンスを共有するにはどうすればよいですか?
前もって感謝します