Каков хороший способ всплеснуть события INotifyPropertyChanged через свойства ViewModel с MVVM? - PullRequest
16 голосов
/ 14 октября 2010

Я пытаюсь найти лучший способ всплыть события PropertyChanged из вложенных свойств в моем ModelView. Скажем, у меня есть ModelView PersonModelView, у которого есть свойство PersonModelView.Address. Address в свою очередь имеет свойство City. Когда я связываюсь с City, на мой взгляд, я делаю что-то вроде {Binding Address.City}.

Моя проблема в том, что даже если Address реализует INotifyPropertyChanged, привязка не будет обновляться, поскольку она обрабатывает PropertyChanged на PersonModelView, , а не Address. Я думаю, что у меня есть два варианта: (1) изменить источник привязки (или изменить DataContext) на свойство Address или (2) иметь дескриптор PersonModelView PropertyChanged на объекте Address и обновить свой собственный PropertyChanged чем-то вроде Address.City.

Как вы, ребята, решаете это? (Я использую легкий инструментарий MVVM в настоящее время, но меня интересуют любые подходы)

Ответы [ 4 ]

8 голосов
/ 14 октября 2010

Если Address реализует INotifyPropertyChanged и правильно вызывает PropertyChanged события в своем свойстве City, то привязка должна заметить, что свойство, с которым она связана, изменилось.

3 голосов
/ 14 октября 2010

Вот поток SO, содержащий решение о том, как всплыть эти уведомления: При вложении свойств, которые реализуют INotifyPropertyChanged, должен изменяться распространение родительского объекта?

Однако IIRC WPF обладает интеллектомдля автоматического отслеживания адреса для уведомлений INotifyPropertyChanged, когда для привязки элемента управления установлено значение Address.City без необходимости PersonViewModel для повторной передачи уведомлений об обновлении объекта Address.

1 голос
/ 14 октября 2010

Ваш Address объект реализует INotifyPropertyChanged?Если нет, я думаю, что это решит проблему, которую вы видите.

Редактировать: Извините, только что заметил, что вы упомянули в своем посте, что вы уже пробовали это.Вы пытались подписаться на событие PropertyChanged объекта Address в PersonViewModel?OnChanged, вы можете выполнить PropertyChanged для вашего объекта Address.

0 голосов
/ 27 мая 2014

Проверьте PropertyChangedPropagator, он может обрабатывать зависимости от свойств моделей вложенных представлений, включая динамически изменяемые модели вложенных представлений: http://www.codeproject.com/Articles/775831/INotifyPropertyChanged-propagator

...