2010-09-14 6 views
2

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

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

ответ

2

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

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

3

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

Смежные вопросы