Как я могу создать привязку в коде позади, который не указывает путь? - PullRequest
3 голосов
/ 01 декабря 2011

Я отвечал на другой вопрос о создании привязки в выделенном коде, и моя первоначальная попытка ответить на него состояла в том, чтобы опубликовать код привязки, в котором не указано Path. Эта привязка компилируется нормально, однако значение никогда не обновляется. Если я изменяю привязку, чтобы использовать путь, он работает нормально.

Почему это? И как правильно создать привязку в коде позади, у которого нет пути? Например, как бы я воссоздал Value="{Binding }" в коде позади?

Нерабочий код:

Binding b = new Binding();
b.Source = SomeInt;
b.Mode = BindingMode.OneWay;
MyProgressBar.SetBinding(ProgressBar.ValueProperty, b);

SomeInt = 50;

Рабочий код:

Binding b = new Binding();
b.Source = this;
b.Path = new PropertyPath("SomeInt");
MyProgressBar.SetBinding(ProgressBar.ValueProperty, b);

SomeInt = 50;

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Механизм связывания подписывается на INPC и DP -обмена на объекте Source (и не оставляет на Path) и проверяет, является ли Pathсвойство / свойства были / были изменены.Если нет Path, нет уведомлений.Весьма прискорбный недостаток.

(возможно, я немного упрощаю систему, но суть в том, что нет никаких изменений в исходных изменениях, они не отслеживаются и не могут отслеживаться)


{Binding} эквивалентно new Binding() (без дополнительных свойств), эта привязка может обновляться при наличии событий для DataContext изменений.

1 голос
/ 01 декабря 2011

Binding.Source набирается как System.Object.Поэтому, когда вы делаете:

b.Source = SomeInt;

, вы назначаете тип значения (System.Int32) чему-то типа System.Object, что означает, что вы получите коробочную копию исходного значения.

Штучная копия находится в куче и не имеет отношения к исходной переменной.При изменении исходной переменной с коробочной копией ничего не происходит.

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