Двусторонняя привязка данных к POCO без INotifyPropertyChanged - PullRequest
2 голосов
/ 14 сентября 2010

Как работает двусторонняя привязка данных в Silverlight, когда свойства объекта источника данных не вызывают PropertyChanged событий в их установщиках?

Например, в примерах кода я видел привязку данных к экземплярамструктуры System.Windows.Point, которая не реализует INotifyPropertyChanged и является изменяемой .Что происходит (или должно происходить), если кто-то устанавливает свойства X и Y непосредственно в точке, а не заменяет объект новым экземпляром?

Ответы [ 2 ]

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

Пользовательский интерфейс не обновляется. Здесь нет магии. Отсутствие события означает, что пользовательский интерфейс пропустит обновление.

2 голосов
/ 14 сентября 2010

Точка - это структура, поэтому, хотя Точка является изменяемой, Точка, полученная из вызова свойства, не совпадает с Точкой, хранящейся в базовом поле; это копия. Таким образом, если вы изменяете копию, основное поле остается прежним. Уведомление об изменении свойства не требуется, поскольку значение свойства фактически не изменилось. Проблема возникнет только в том случае, если класс фактически мутирует Point непосредственно в своем закрытом поле. Разработчик класса должен либо не делать этого, либо вручную вызывать уведомление PropertyChanged при изменении структуры.

Это одна из причин, по которой изменчивые структуры опасны. Они не могут быть изменены с помощью свойства, но клиенты класса могут ошибочно предположить, что они могут быть.

...