4

MVVMLightToolkitのバージョン3.0.3.19を使用しています。

http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspxから:

メッセージは、トークンを使用してメッセンジャーを介して送信できるようになりました。

  • トークンを使用してメッセージを送信するには、メソッドoverload Send(TMessage message、object token)を使用します。

  • トークン付きのメッセージを受信するには、メソッドRegister(オブジェクト受信者、オブジェクトトークン、アクションアクション)またはRegister(オブジェクト受信者、オブジェクトトークン、bool receiveDerivedMessagesToo、アクションアクション)を使用します

トークンは、単純な値(int、stringなど)またはクラスのインスタンスにすることができます。別のトークンで登録した受信者、またはトークンをまったく登録していない受信者には、メッセージは配信されません。


上記のドキュメントによると、ViewModelAで次のことを試しました。

Messenger.Default.Send(new NotificationMessage("message"), "token");

ViewModel Bの以下に加えて:

Messenger.Default.Register<NotificationMessage>(this, "token", (msg) => Console.WriteLine(msg.Notification));

ただし、コールバックは実行されません。私は何が間違っているのですか?

4

1 に答える 1

3

私のViewModelLocatorはViewModelBの前にViewModelAを初期化していました。つまり、メッセージはViewModel Aによって適切に送信されていましたが、ViewModelBはまだ実際にメッセージを受信して​​いませんでした。

ViewModelLocatorで初期化の順序を変更したところ、問題は解決しました。また、MessengerがString以外の他のタイプのトークンで機能することを確認しました。

于 2012-08-06T14:33:51.860 に答える