2012-03-30 28 views
0

WPFとPRISMを使用してWPFアプリケーションを作成しようとしています。私はMEFとmvvmも使用しています。イベントaggregastorを使用して互いに通信できる2つのビューモデルを持つことは可能ですか?例えば。ビューモデルAでパブリッシュし、ビューモデルBでサブスクライブしますか?そしてもしそうなら、どのように?私は複数のビューモデルを持つプログラムをビルドしており、これらのビューモデルのいくつかはお互いに通信する必要がありますが、イベントモデルを使用してViewModel Aで公開すると、ビューモデルBを購読することは決して同じイベントアグリゲータにはビューモデルBに接続されたビューを更新します。wpfのEventaggregatorを使用して、viewmodelからviewmodelへのPRISM MEF通信

答えて

0

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

0

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

1

このイベントアグリゲータ

を定義するための基本的な重要なステップは、(1)イベントAGG作成さ..

パブリッククラスYourEvent:CompositePresentationEvent {

}

(2)出版vm

eventAggregator.Get()。Publish(object);

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

YourEvent eventobj = eventAggregator.Get()。

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

    subscriptionToken = eventobj.Subscribe(YourEventHandler, ThreadOption.UIThread, false, yourfun); 
0

EventAggregatorは常に同じです。各ViewModelを渡す必要があります。 プリズムとMEFあなたのためにこれを行うことができます。

  1. あなたはMEF

0

でEventAggregatorの参照を注入することができますPRISM

  • のユニティを使用してコンストラクタでEventAggregatorをロードすることができますViewModel "B"とViewModel "A"の両方のインスタンスを持っていますか?サブスクリプションコードが実行される前にイベントを公開していますか?彼らはどちらも同じイベントにパブリッシュ/サブスクライブしていますか?

    EventAggregator.GetEvent(Of MyEventType).Subscribe(Sub() 
    
                    End Sub) 
    
  • 関連する問題