2013-06-07 14 views
28

Czy ktoś mógłby być na tyle uprzejmy, aby dać mi przykład, jak wysyłać i rejestrować obiekty niestandardowe między klasami za pomocą programu Messenger MVVM Light lub wskazywać mi samouczek, który to omawia (najlepiej konkretny przykład) ? Próbowałem użyć programu Messenger, aby przekazać obiekt w moim projekcie innej klasie, ale nigdy nie odniosłem sukcesu. Szukałem w Internecie przykładów, ale nie znalazłem niczego, co pokazałoby mi to, czego potrzebuję. Dzięki.MVVM Lekki Posłaniec - Wysyłanie i rejestrowanie obiektów

Odpowiedz

50

Jesse Liberty firmy Microsoft ma świetny numer concrete walk through, w jaki sposób korzystać z wiadomości w ramach MVVM Light. Założeniem jest stworzenie klasy, która będzie działać jako typ wiadomości, subskrybować, a następnie publikować.

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

To będzie zasadniczo wysłać wiadomość na podstawie powyższego typu/klasy ...

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

Teraz można zarejestrować dla danego rodzaju komunikatu, który jest tej samej klasy zdefiniowane powyżej i dostarczają metoda, która zostanie wywołana, gdy wiadomość zostanie odebrana, w tym przypadku 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

wolę używać rodzaj widoku w wiadomości, a nie część nazwy, ponieważ będzie ona zostać zmieniona podczas zmiany nazwy strony lub przeniesienie go do innej przestrzeni nazw/folderu –

+0

Nie Sticky wydarzeniu? –

+0

Dzięki, to było dokładnie to, czego szukałem. Myślę, że mam zamiar przekazać typy, a nie ciągi, sama intellisense sprawia, że ​​życie jest o wiele przyjemniejsze. –