Используйте 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 EventTrigger в триггере View, если он требует диктует базовую модель Viewmodel?
  • Какая структура MVVM - лучшая структура для приложений WPF
  • Передача параметров между режимами просмотра
  • Как правильно привязать свойство зависимостей usercontrol в рамках MVVM
  • Связывание ComboBox SelectedItem с использованием MVVM
  • Преобразовать System.Windows.Media.ImageSource в System.Drawing.Bitmap
  • Замена точки входа WPF
  • WPF: как настроить SelectionBoxItem в ComboBox
  • Могу ли я наложить окно WPF поверх другого?
  • Группировка элементов в ComboBox
  • Как преобразовать изображение в массив байтов
  • Давайте будем гением компьютера.