Ответ 1
Если Address
реализует INotifyPropertyChanged
и правильно создает события PropertyChanged
в свойстве City
, тогда привязка должна заметить, что свойство, с которым оно связано, изменилось.
Я пытаюсь найти лучший способ пузырить события PropertyChanged из вложенных свойств в моем ModelView. Скажем, у меня есть ModelView PersonModelView
, у которого есть свойство PersonModelView.Address
. Address
в свою очередь имеет свойство City
. Когда я привязываюсь к City
, на мой взгляд, я бы сделал что-то вроде {Binding Address.City}
.
Моя проблема в том, что даже если Address
реализует INotifyPropertyChanged
, привязка не будет обновляться, поскольку она обрабатывает PropertyChanged
на PersonModelView
, а не Address
. Я думаю, у меня есть два варианта: (1) изменить источник привязки (или изменить DataContext
) на свойство Address
или (2) иметь PersonModelView
дескриптор PropertyChanged
объекта Address
и refire свой собственный PropertyChanged
с чем-то вроде Address.City
.
Как вы, ребята, решаете это? (Я использую MVVM light toolkit в mo, но меня интересуют любые подходы)
Если Address
реализует INotifyPropertyChanged
и правильно создает события PropertyChanged
в свойстве City
, тогда привязка должна заметить, что свойство, с которым оно связано, изменилось.
Здесь существует поток SO, содержащий решение о том, как создавать пузырьки этих уведомлений: Когда свойства вложенности, реализующие INotifyPropertyChanged, должны быть изменены прототип родительского объекта?
Тем не менее, IIRC WPF имеет возможность автоматически отслеживать адрес для уведомлений INotifyPropertyChanged, когда привязка элемента управления установлена на Address.City без PersonViewModel, которая должна повторно транслировать уведомления об обновлении объектов адреса.
Создает ли ваш объект Address
INotifyPropertyChanged
? Если нет, я думаю, что это исправит проблему, которую вы видите.
Edit: Извините, только что заметил, что вы упомянули в своем посте, что вы уже это пробовали. Вы пытались подписаться на событие PropertyChanged объекта Address в PersonViewModel? OnChanged, вы можете выполнить PropertyChanged в объекте Address.
Отметьте PropertyChangedPropagator, он может обрабатывать зависимости от свойств вложенных моделей представлений, включая динамически изменяемые вложенные модели представления: http://www.codeproject.com/Articles/775831/INotifyPropertyChanged-propagator