2013-06-07 9 views
28

Könnte jemand so freundlich sein, mir ein Beispiel zu geben, wie ich benutzerdefinierte Objekte zwischen Klassen mit MVVM Lights Messenger senden und registrieren kann oder auf ein Tutorial, das dies abdeckt (vorzugsweise ein konkretes Beispiel) ? Ich habe versucht, Messenger zu verwenden, um ein Objekt in meinem Projekt an eine andere Klasse zu übergeben, aber ich war nie erfolgreich darin. Ich habe online nach Beispielen gesucht, aber nichts gefunden, was mir zeigt, was ich brauche. Vielen Dank.MVVM Light Messenger - Senden und Registrieren von Objekten

Antwort

50

Jesse Liberty von Microsoft hat eine große concrete walk through auf, wie Sie die Messaging in MVVM Light nutzen können. Die Prämisse besteht darin, eine Klasse zu erstellen, die als Ihr Nachrichtentyp dient, abonnieren und dann veröffentlichen.

public class GoToPageMessage 
{ 
    public string PageName { get; set; } 
} 

Dies wird im Wesentlichen die Nachricht auf der Grundlage der oben genannte Art/Klasse senden ...

private object GoToPage2() 
{ 
    var msg = new GoToPageMessage() { PageName = "Page2" }; 
    Messenger.Default.Send<GoToPageMessage>(msg); 
    return null; 
} 

Jetzt können Sie für den gegebenen Nachrichtentyp registrieren, die die gleiche Klasse oben definiert ist und bietet die Methode, die beim Empfang der Nachricht aufgerufen wird, in diesem Fall ReceiveMessage.

Messenger.Default.Register<GoToPageMessage> 
( 
    this, 
    (action) => ReceiveMessage(action) 
); 

private object ReceiveMessage(GoToPageMessage action) 
{ 
    StringBuilder sb = new StringBuilder("/Views/"); 
    sb.Append(action.PageName); 
    sb.Append(".xaml"); 
    NavigationService.Navigate( 
     new System.Uri(sb.ToString(), 
      System.UriKind.Relative)); 
    return null; 
} 
+1

Ich ziehe den Typ der Ansicht in der Nachricht anstelle eines Teils des Namens zu verwenden, da es geändert wird, wenn die Seite umbenennen oder in einen anderen Namensraum/Ordner –

+0

Kein Sticky Ereignis zu verschieben? –

+0

Danke, das war genau das, was ich gesucht habe. Ich denke, dass ich auch Typen anstelle von Strings überliefern werde. IntelliSense alleine macht das Leben viel angenehmer. –