0

WPF と PRISM を使用して WPF アプリケーションを作成しようとしています。MEF と mvvm も使用しています。イベント アグリゲータを使用して相互に通信できる 2 つのビューモデルを持つことは可能ですか? 例えば。ビューモデル A で公開し、ビューモデル B でサブスクライブしますか? もしそうなら、どのように?複数のビューモデルを使用してプログラムを構築しましたが、これらのビューモデルの一部は互いに通信する必要がありますが、イベントアグリゲーターを使用してビューモデル A で公開すると、ビューモデル B のサブスクライブが同じイベントアグリゲーターに属していると認識されないため、ビューモデル B に接続されているビューを更新します。

4

5 に答える 5

1

これは、Event Aggregator を定義するための基本的な重要な手順です。

(1) イベント集計の作成..

public class YourEvent: CompositePresentationEvent {

}

(2) パブリッシャー VM

eventAggregator.Get().Publish(オブジェクト);

(3) サブスクリプション VM

YourEvent eventobj = eventAggregator.Get();

    if (subscriptionToken != null)
    {
        eventobj.Unsubscribe(subscriptionToken);
    }

    subscriptionToken = eventobj.Subscribe(YourEventHandler, ThreadOption.UIThread, false, yourfun);
于 2012-03-30T05:12:19.913 に答える
0

唯一の可能性は、ViewModel "B"がロードされていないか、イベントにまだサブスクライブしていないことです。これが当てはまらない場合は、スニペットを貼り付けることをお勧めします。

于 2012-03-30T04:52:58.610 に答える
0

EventAggregator は常に同じです。各 Viewmodel に渡す必要があります。Prism と MEF はこれを行うことができます。

  1. PRISM の Unity を使用して、コンストラクターで EventAggregator をロードできます。

  2. MEFでEventAggregatorの参照を注入できます

于 2012-03-30T06:15:50.597 に答える
0

WeakReference (弱いサブスクリプション) を使用してサブスクライブしていますか? その場合、サブスクライバーが他の場所で参照されていない場合は、イベントを公開する前にガベージ コレクションが行われて消えている可能性があります。

于 2012-03-30T04:55:17.250 に答える