Как правило, вы разрешаете связь внутри просмотра, используя шаблон-посредник , а не через свойство зависимости. Это позволяет разрабатывать представления и элементы управления независимо друг от друга, поскольку посредник обеспечивает слабую связь между представлениями.
Предположим, у вас есть 2 вида, с представлением A, содержащим элемент управления A, и представлением B, содержащим элемент управления B. У вас также есть модель представления для каждого вида. Модель представления - это то, где связь между представлениями будет происходить с использованием общего посредника. Кроме того, вы можете добавить посредник к каждому элементу управления как свойство зависимости и связать это свойство с посредником модели представления.
Вид A
- Содержит элемент управления A
- имеет свой DataContext установлен в ViewModel A
- Взаимодействие пользователя с Control A позволяет получить / установить свойства модели представления с помощью привязки данных
- Модель просмотра содержит общую ссылку на посредника / мессенджера
Вид B
- Содержит элемент управления B
- имеет свой DataContext установлен в ViewModel B
- Взаимодействие пользователя с Control B позволяет получить / установить свойства модели представления с помощью привязки данных
- Представление модели содержит общую ссылку на посредника / мессенджера
Таким образом, когда пользователь взаимодействует с элементом управления A в представлении A, взаимодействие заставляет посредника опубликовать сообщение, содержащее информацию о событии. Модель представления представления B подписывается на уведомление, когда это сообщение публикуется, и обновляет свои свойства, что вызывает изменение в элементе управления B посредством привязки данных.
Посредник, используемый обеими моделями представления, является одним и тем же экземпляром, часто внедряемым в модели представления с использованием контейнера IoC. Реализация посредника довольно тривиальна, и есть также несколько наборов инструментов MVVM, таких как MVVM Light, которые предоставляют класс «Messenger», который обеспечивает такой тип связи.
Основная идея заключается в том, что ваши представления и элементы управления больше не знают друг друга, и вместо этого взаимодействие абстрагируется от публикации и подписки сообщений; облегчение слабосвязанной связи между различными объектами и типами объектов.
Посредники и ресурсы MVVM:
- Простой посредник
- MVVM Light Toolkit
- Реализация шаблона MVVM
- Агрегация событий