2010-08-03 9 views
8

Widzę w pakiecie MVVM-Light, że mogę wysyłać wiadomości z tokenami - to, co muszę zrobić, to wysłać obiekt, z wiadomością dołączoną do tego obiektu - jak Dodaj, Edytuj, Usuń cokolwiek.Jak używać MVVM-Light z tokenami?

Jaki jest najlepszy sposób wysyłania i odbierania tej wiadomości? Myślę, że wysyłaj tylko: Messenger.Default.Send (myObject, ActionEnum.DELETE);

Ale w otrzymaniu: Messenger.Default.Register (this, ????, HandleMyMessage);

Jaka jest prawidłowa składnia?

Dzięki!

Odpowiedz

13

Oto krótka sekcja kodu dla wysyłania i rejestracji. Twoje powiadomienie to komunikat, który przekazuje odbiorcy informację o zamiarze. Treść to element, który chcesz wysłać, i możesz dodatkowo zidentyfikować, kto wysłał wiadomość, a nawet jaki przedmiot był przeznaczony dla tej wiadomości dla nadawcy i celu.

Messenger.Default.Send<NotificationMessage<Job>>(
    new NotificationMessage<Job>(this, myJob, "Add") 
); 

Messenger.Default.Register<NotificationMessage<Job>>(
this, nm => 

{ 
    // this might be a good idea if you have multiple recipients. 
    if (nm.Target != null && 
     nm.Target != this) 
     return; 

    // This is also an option 
    if (nm.Sender != null && 
     nm.Sender != expectedFrom) // expectedFrom is the object whose code called Send 
     return; 

    // Processing the Message 
    switch(nm.Notification) 
    { 
     case "Add": 
      Job receivedJob = nm.Content; 
      // Do something with receivedJob 
      break; 
     case "Delete": 
      Job receivedJob = nm.Content; 
      // Do something with receivedJob 
      break; 
    } 
}); 
14

Tak samo jako dodatek: token nie służy do identyfikacji zadania (powiadomienia), ale raczej odbiorcy. Odbiornik (e) rejestrujący (e) z tym samym tokenem, co nadawca, otrzyma wiadomość, podczas gdy inne odbiorniki jej nie dostaną.

Do tego, co chcesz zrobić, używam opcjonalnego typu Powiadomienia zawartego w zestawie narzędzi. Ma dodatkową właściwość string (powiadomienie), którą można ustawić na dowolne urządzenie. Używam tego, aby "wydawać rozkazy" odbiorcy.

Cheers, Laurent

+0

Token może być dowolny obiekt, a nie tylko typ odbiornika jest prawidłowy? – nportelli

+1

To prawda, token nie jest w żaden sposób związany z odbiornikiem, jest tylko obiektem (lub wartością taką jak int). To jest identyfikator, jeśli chcesz. – LBugnion

+0

@LBugnion Czy możesz wypowiedzieć się, jeśli odpowiedź Ryana jest najlepszą praktyką dla tego problemu? Czy możesz napisać, jak byś to osiągnął? Dzięki – GONeale