4 Stimmen

Wie werden Token mit der Klasse Messenger richtig verwendet?

Ich verwende Version 3.0.3.19 des MVVM Light Toolkit.

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

Nachrichten können jetzt mit einem Token über den Messenger versendet werden.

  • Um eine Nachricht mit Token zu senden, verwenden Sie die Überladung der Methode Send(TMessage message, object token).

  • Um eine Nachricht mit Token zu empfangen, verwenden Sie die Methoden Register(object recipient, object token, Action) oder Register(ob object token, bool receiveDerivedMessagesToo, Action action)

Der Token kann ein einfacher Wert (int, string, etc ) o einer Klasse. Die Nachricht wird nicht an Empfänger zugestellt, die sich mit einem anderen Token oder ohne Token registriert haben.


Gemäß der obigen Dokumentation habe ich folgendes in ViewModel A versucht:

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

Zusammen mit dem Folgenden in ViewModel B:

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

Der Rückruf wird jedoch nie ausgeführt. Was mache ich falsch?

3voto

bugged87 Punkte 2826

Mein ViewModelLocator initialisierte ViewModel A vor ViewModel B. Mit anderen Worten, die Nachricht wurde ordnungsgemäß von ViewModel A gesendet, aber ViewModel B war noch nicht da, um sie tatsächlich zu empfangen.

Ich änderte die Reihenfolge der Initialisierung im ViewModelLocator und das Problem war gelöst. Außerdem habe ich überprüft, dass der Messenger mit Token anderer Typen als String funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X