在XAML中,我可以这样写:
<Setter Property="PropertyName" Value="{Binding ...}" />
我如何在代码中执行此操作?我之前在代码中构造了绑定,但我似乎无法在ValueProperty
类上找到任何静态Setter
对象传递给BindingOperations.SetBinding()
。
答案 0 :(得分:13)
在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,因此无法绑定。因此,当您在其中存储Binding对象时,XAML或代码中都没有歧义。
当Setter实际应用于对象时,如果在Setter中找到Binding,则调用BindingOperations.SetBinding的等效项。否则,该属性将直接设置。