В XAML я могу записать что-то вроде этого:
<Setter Property="PropertyName" Value="{Binding ...}" />
Как я сделал бы это в коде? Я создал привязку в коде прежде, но я, может казаться, не нахожу помех ValueProperty
объект на Setter
класс для передачи BindingOperations.SetBinding()
.
При установке привязки для Setter вам вообще не нужны BindingOperations. Все, что вам нужно сделать, это:
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.
Когда Setter фактически применяется к объекту, если Binding обнаруживается в Setter, вызывается эквивалент BindingOperations.SetBinding. В противном случае свойство устанавливается напрямую.