Как использовать MVVM-Light с токенами? - PullRequest
8 голосов
/ 03 августа 2010

Я вижу в пакете MVVM-Light, что я могу отправлять сообщения с токенами, что мне нужно сделать, это отправить объект, с сообщением, прикрепленным к этому объекту, например, Add, Edit, Delete что угодно.

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

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

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

Спасибо!

Ответы [ 2 ]

14 голосов
/ 06 августа 2010

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

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

Приветствия, Лоран

13 голосов
/ 04 августа 2010

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

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;
    }
});
...