2011-01-27 9 views
0

ViewModelA動作しません:そのコンストラクタ内MVVMライトメッセンジャーが

を(ブレークポイントがfollにヒットライン。):

Messenger.Default.Register<int>(this, "token", OnHitIt); 

ViewModelB:

ブレークポイントは、この行を打つん

Messenger.Default.Send(hitItId, "token") 

しかし何らかの理由でブレークポイントがOnHitItメソッドにヒットすることはありません。その理由は何か...

答えて

1

はViewModelAで

を使用してみてください

Messenger.Default.Send(new NotificationMessage<int>(hitItId, "token")); 
+0

私はそれが私のやり方でも働いていたはずだと思いますが、あなたがこのようにしたように言いました。そうすることで、タイプミスマッチであることがわかりました。 intとint?ところで、私はCの新しい#何違いは?任意のリンクは、 – WhoIsNinja

+0

を確認するのに役立ちます、それはint型とint型の間で型の不一致があったため動作しませんでしたか?何のエラーも与えませんでした。今では私の古いコードも使えます。 – WhoIsNinja

+1

int?値が整数またはnullを保持できることを意味します。ここで、intは整数のみを保持できます –

0

ViewModelAは何も参照されなくなりましたが、そのトークンルックアップは値ではなく参照によるものです。つまり、レジスタの「トークン」は、「送信」の「トークン」と同じ参照ではありません。

Messenger.Default.Register<NotificationMessage<int>>(this, OnHitIt); 

そしてOnHitIt方法はViewModelBオン

private void OnHitIt(NotificationMessage<int> m) 
{ 
    if (m.Notification == "token") 
    { 
     // code goes here 
     // m.Content will get the int passed in 
    } 
} 

をBE-ます:

+0

ませんViewModelAはそうすることができますMainViewModelです参考にならない親ビューモデル)。どうやって "トークン"と "トークン"と違うことができるのですか?ハードコードされた値を渡しています。 – WhoIsNinja

+1

質問に答えましたが、参考のためだけに、トークンは単純な値または参照型にすることができます。参照型を使用する場合は、参照がテストされます。値の型の場合は、値がテストされます。文字列の場合、値がテストされます。 – LBugnion