WPF MVVM: Как ViewModels общаются друг с другом? - PullRequest
19 голосов
/ 04 февраля 2011

У меня есть представление, в котором есть 2 вложенных представления, и для каждого представления назначена модель представления:

ViewA - ViewModelA
{ 
   ViewB - ViewModelB
   ViewC - ViewModelC
}

ViewB имеет текстовое поле, а ViewC имеет поле со списком, оба из которых мне нужен доступ из ViewModelA. Не сам элемент управления GUI, а связанное значение, т. Е. Текст текстового поля и .SelectedItem поля со списком. В настоящее время у меня есть только ViewModelB и ViewModelC в качестве свойств ViewModelA, но это неправильно.

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

Ответы [ 2 ]

12 голосов
/ 04 февраля 2011

Один из способов отключения ViewModels общаться друг с другом - использовать механизм публикации / подписки, такой как PRISM s EventAggregator . Тем не менее, в отношении родителя / потомка ViewModel, я думаю, что для родителя нормально иметь прямые знания и контроль над дочерней ViewModel.

Лично я не считаю составление ViewModel из других ViewModel плохой практикой. Я делаю это все время. Я обычно предпочитаю композицию, а не наследование в моих ViewModels.

2 голосов
/ 04 февраля 2011

Модели представления обычно «наследуют» отношения от модели. И нет ничего плохого в том, чтобы добавить отношение, когда оно имеет смысл.

Совершенно нормально, что ViewModel имеет свойство, ссылающееся на другую ViewModel.

...