Используйте Messenger MVVM Light для передачи значений между View Model

Может ли кто-нибудь быть таким добрым, чтобы объяснить Messenger MVVM Light для меня? Я читал сообщение о StackOverflow здесь: MVVM передает значения между моделями просмотров, пытаясь получить это. Документация на MVVM Light не так хороша в данный момент, поэтому я совершенно не уверен, куда идти.

Скажем, у меня есть две модели ViewModels и ViewModelLocator. Я хочу иметь возможность передавать параметры между всеми тремя без проблем. Как я буду делать это с посланником? Он способен на это?

Изменить: Вот моя новая реализация. На данный момент, похоже, что MessengerInstance не требует токена. Я ужасно смущен.

В первой ViewModel:

MessengerInstance.Send(SelectedDocument); 

А во втором:

 MessengerInstance.Register(this, xdoc => CopySettings(xdoc)); 

Может быть, совершенно неправильно. У меня не было возможности проверить это, но визуальная студия меньше злится на меня, когда я это делаю. Также MessengerInstance регистрируется до отправки сообщения.

Скажем, у меня есть две модели ViewModels и ViewModelLocator. Я хочу иметь возможность передавать параметры между всеми тремя без проблем. Как я буду делать это с посланником? Он способен на это?

Да, это именно то, для чего.

Отправить сообщение:

 MessengerInstance.Send(payload, token); 

Чтобы получить сообщение:

 MessengerInstance.Register( this, token, payload => SomeAction(payload)); 

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

Обратите внимание, что «токен» может быть действительно любым, что идентифицирует сообщение. Хотя для этого часто используется строка, я предпочитаю использовать перечисление, потому что оно немного безопаснее и позволяет intellisense, «находить обычаи» и т. Д.

Например:

 public enum MessengerToken { BrushChanged, WidthChanged, HeightChanged } 

Тогда ваша передача / получение будет выглядеть примерно так:

 // sending view model MessengerInstance.Send(Brushes.Red, MessengerToken.BrushChanged); // receiving view model // put this line in the constructor MessengerInstance.Register(this, token, brush => ChangeColor(brush)); public void ChangeColor(Brush brush) { Brush = brush; } 

[EDIT] URL-адрес комментария devuxer ниже изменен на: http://blog.galasoft.ch/posts/2009/09/mvvm-light-toolkit-messenger-v2/

  • Выбор элемента текстового поля в списке не изменяет выбранный элемент списка
  • Почему привязка данных WPF к исключению ласточки?
  • WPF: Есть ли способ переопределить часть ControlTemplate без переопределения всего стиля?
  • WPF - привязка к индексу предметов изнутри ItemTemplate of ItemsControl?
  • Получить активный цвет автоматической цветовой темы Windows 8
  • Динамический шаблон изменения данных
  • Как связать TextBlock с ресурсом, содержащим форматированный текст?
  • WPF: имя не существует в пространстве имен
  • Синхронизированная прокрутка двух ScrollViewer, когда любой прокручивается в wpf
  • Как обнаружить сломанные привязки данных WPF?
  • как использовать MVVMLight SimpleIoc?
  • Interesting Posts

    ng2 – динамическое создание компонента на основе шаблона

    Изменить тип сети для адаптера (общедоступный или частный)

    Локальная долгота Координаты с кодом состояния в R

    @ Html.DisplayFor – DateFormat (“mm / dd / yyyy”)

    Должна ли функция иметь только один оператор возврата?

    Как отправить сообщение Skype из командной строки Windows?

    Текст в контейнере flex не переносится в IE11

    Как получить путь к папке из пути к файлу с помощью CMD

    Выяснение, какая часть ПК неисправна

    Построить на TFS 2013 не удалось, но нормально локально

    Как получить реальный размер жизни объекта из изображения, когда вы не знаете расстояние между объектом и камерой?

    Как получить заголовок с карточек или похожих предметов с одинаковой высотой с помощью гибкой коробки?

    UIWebView отправляет один и тот же User-Agent в заголовки запроса в качестве мобильного Safari?

    Какие функции Boost перекрываются с C ++ 11?

    Множественные разрешения для Android 6.0

    Давайте будем гением компьютера.