Установщик привязки - PullRequest
7 голосов
/ 13 июня 2010

В XAML я могу написать что-то вроде этого:

<Setter Property="PropertyName" Value="{Binding ...}" />

Как бы я сделал это в коде? Ранее я создавал привязки в коде, но я не могу найти какой-либо статический объект ValueProperty в классе Setter для передачи BindingOperations.SetBinding().

1 Ответ

13 голосов
/ 13 июня 2010

При установке привязки на Setter вам вообще не нужны операции BindingOperation.Все, что вам нужно сделать, это:

var setter = new Setter(TextBlock.TextProperty, new Binding("FirstName"));

или эквивалентно

var setter = new Setter
{
  Property = TextBlock.TextProperty,
  Value = new Binding("FirstName"),
};

, любой из них будет эквивалентен

<Setter Property="TextBlock.Text" Value="{Binding FirstName}" />

Причина, по которой это работает, заключается в том, что Setter.Value - это обычное свойство CLR, а не DependencyProperty, и поэтому оно не может быть связано.Таким образом, нет никакой двусмысленности ни в XAML, ни в коде, когда вы сохраняете в нем объект Binding.

Когда метод Set фактически применяется к объекту, если в Setter обнаружен Binding, эквивалент BindingOperations.SetBinding называется.В противном случае свойство устанавливается напрямую.

...