Как я могу слушать в моей ViewModel изменения от другой ViewModel? - PullRequest
1 голос
/ 05 февраля 2012

У меня есть задача написать пользовательский элемент управления для отображения некоторых результатов с использованием паттерна MVVM.

Основное приложение (называемое ApplicationVM) имеет два свойства UserControlViewModel и SelectedRecord. Первое свойство содержит экземпляр UserControlViewModel. В XAML я использую это свойство для привязки UserControl к UserControlViewModel. DependencyProperty PageCount предназначен для простых уведомлений между функцией отображения в представлении и UserControlViewModel.

<control:UserControl DataContext="{Binding UserControlViewModel}" PageCount="{Binding DocumentPageCount}" />

Вот реализация второго свойства в ApplicationViewModel.

public Record SelectedRecord
{
    get
    {
        return m_SelectedRecord;
    }
    set
    {
        m_SelectedRecord = value;
        OnPropertyChanged("SelectedRecord");
    }
}

Позже это свойство будет заменено. Но я должен сделать зависимость между свойством "SelectedRecord" и "Record" из "UserControlViewModel", который вызывает функцию для генерации нового контента (например, GenerateContent()). Как можно сделать так, чтобы изменение свойства SelectedRecord обновляло свойство Record UserControlViewModel для создания нового содержимого? Или мой UserControlViewModel слышит OnPropertyChanged("SelectedRecord") для автоматического создания нового контента?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Я бы использовал мессенджер - так ваши модели представлений могут быть красиво отделены.

Вот тема на SO, рассказывающая о том, что в свете MVVM:

Свет MVVM -как получить доступ к свойству в другой модели просмотра

3 голосов
/ 06 февраля 2012

Одним из простых решений было бы обновить установщик вашего свойства SelectedRecord. Здесь вы можете вызвать метод GenerateContent для UserControlViewModel и, возможно, также установить там свойство SelectedRecord, если вам нужно.

В качестве альтернативы ваш UserControlViewModel может прослушивать событие PropertyChanged в ApplicationVM, но для этого для UserControlViewModel потребуется ссылка на ApplicationVM.

Наконец, вы можете использовать систему событий для связи между вашими моделями представления. Это будет гарантировать, что ваши модели представления были хорошо отделены, но цена будет добавлена ​​сложность. Ознакомьтесь с документацией на Призматический агрегатор событий , если вы заинтересованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...