Как синхронизировать (моделировать) данные между различными представлениями в MVVM - PullRequest
2 голосов
/ 09 ноября 2011

Я пытаюсь синхронизировать данные между отдельными представлениями в MVVM.

Вот сценарий:

Существует две модели представления и два представления соответственно:

ViewModel1: содержит список объекта «Person» с именем «People», который определен в Entity Framework и получен через службу WCF.

View1: содержит ItemsControl, который привязан к «People» ViewModel. Цвет предмета может варьироваться в зависимости от его стоимости, например: лицо старше 60 лет может выглядеть красным, а лицо моложе 18 лет - зеленым. Это достигается с помощью преобразователя значений.

(в View1 есть кнопка «Показать подробную информацию», при ее нажатии появляется диалоговое окно ChildWindow, и отображается подробная информация о выбранном в данный момент «Персоне»)

ViewModel2: содержит объект «SelectedPerson» и реализует метод «Save».

View2: содержит несколько полей ввода, привязанных к соответствующим полям объекта «SelectedPerson», таких как TextBox для «Person.FirstName», DateTimePicker для «Person.Birthday», RadioButton для «Person.Gender» и т. Д.

Проблема:

когда я изменил некоторые поля (то есть поле «Имя») и нажал кнопку «Сохранить», я даже могу видеть, что изменения были внесены в базу данных. Однако соответствующий элемент в View1 не смог обновить свой цвет.

Есть ли лучший способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Вы можете решить такие проблемы обычно тремя способами в зависимости от вашей настройки:

1 & 2) Если 2 ВМ создаются одним и тем же родительским объектом, они могут быть подключены через INotifyPropertyChanged или Events для обновленных свойств

3) Если они отключены, вы можете использовать EventAggregator для сообщения между виртуальными машинами.CaliburnMicro имеет довольно хорошую реализацию, но вы можете создать ее самостоятельно, используя всего два класса.Для получения дополнительной информации см .: Caliburn.Микро Суп от орехов, часть 8 - EventAggregator

0 голосов
/ 09 ноября 2011

Трудно ответить, не зная точно, как связаны ваш SelectedPerson и список People.Поэтому я предполагаю, что SelectedPerson - это один элемент из вашего списка People.В этом случае ваша проблема заключается в том, что элемент управления представлением, отображающий цвет в зависимости от возраста, не получает информацию об изменении значения.

Эта информация обычно делается с моделью представления, которая реализует INotifyPropertyChanged.Каждый раз, когда свойство изменяется, в вашем случае свойство Age вашего PersonViewModel, событие PropertyChanged вызывается, и, таким образом, все связанные элементы знают об изменении значения и, следовательно, запрашивают свои значения.

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