绑定Setter.Value代码

时间:2010-06-13 00:59:11

标签: c# wpf binding code-behind setter

在XAML中,我可以这样写:

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

我如何在代码中执行此操作?我之前在代码中构造了绑定,但我似乎无法在ValueProperty类上找到任何静态Setter对象传递给BindingOperations.SetBinding()

1 个答案:

答案 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的等效项。否则,该属性将直接设置。