2010-08-03 2 views
8

Я вижу в пакете MVVM-Light, что я могу отправлять сообщения с токенами - мне нужно отправить объект с сообщением, прикрепленным к этому объекту - например, Добавить, Изменить, Удалить все.Как использовать MVVM-Light с токенами?

Каков наилучший способ отправки и получения этого сообщения? Я думаю, что для его отправки просто: Messenger.Default.Send (myObject, ActionEnum.DELETE);

Но в получении: Messenger.Default.Register (это, ????, HandleMyMessage);

Каков правильный синтаксис?

Спасибо!

ответ

13

Вот краткий раздел кода как для отправки, так и для регистра. Ваше Уведомление - это сообщение, которое указывает получателю, что это за намерение. Контент - это элемент, который вы хотите отправить, и вы можете определить, кто отправил это сообщение, и даже то, для чего это сообщение предназначалось для отправителя и цели.

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

Как дополнение: токен не предназначен для определения задачи (уведомления), а скорее приемника. Приемник (ы), который регистрирует (-ы) с тем же токеном, что и отправитель, получит сообщение, а все остальные получатели его не получат.

Для того, что вы хотите сделать, я использую дополнительный тип NotificationMessage, включенный в набор инструментов. Он имеет дополнительное свойство строки (Notification), которое вы можете установить на все, что хотите. Я использую это, чтобы «отдавать приказы» получателю.

Cheers, Laurent

+0

Маркер может быть любой объект, а не только тип приемника правильно? – nportelli

+1

Правильно, токен никак не связан с приемником, это просто объект (или значение, такое как int). Это идентификатор, если хотите. – LBugnion

+0

@LBugnion Можете ли вы прокомментировать, является ли ответ Райана лучшей практикой для этой проблемы? Или вы можете опубликовать, как вы это достигнете? Спасибо – GONeale

Смежные вопросы