在运行时创建绑定的最佳方法是什么?

时间:2010-11-04 14:36:06

标签: wpf data-binding xaml dependency-properties

在我的应用程序中,我想在运行时创建绑定,每个对象都必须有一个单独的绑定。

例如:我有两个UserControl副本,每个副本都有属性Text,它必须绑定到不同的数据源。

由于Dependency属性是静态的,因此不允许每个实例使用DP,每个类只有一个。

所以我想知道实现它的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

要动态处理数据绑定,请查看BindingOperations静态类。

就使用DP而言,我不确定你在问什么。 DP本身是静态的,但DP的值与每个实例相关联。否则,多个TextBox实例如何具有不同的Text值?绑定也特定于每个实例。

答案 1 :(得分:1)

这两种不同的数据源是不同类型的吗?或者它们是同一类型的两个不同实例?

我问,因为您要求的解决方案 - 在运行时创建绑定 - 可能会不必要地复杂化。您通常不需要在运行时创建绑定来解决您所描述的问题。从你到目前为止所说的关于这个问题的内容来看,这听起来似乎是一个更简单的解决方案。

拥有特定用户控件的多个实例,并且每个实例都绑定到不同的源对象,这是非常常见的。您可以使用Xaml中的普通数据绑定表达式执行此操作。诀窍是依靠DataContext来确定每个用户控件使用哪个特定来源。例如:

<my:MyUserControl DataContext="{Binding Path=Source1}" />
<my:MyUserControl DataContext="{Binding Path=Source2}" />

这将创建自定义用户控件的两个实例,MyUserControl,第一个中的任何绑定将附加到Source1中的任何对象,而第二个将使用Source2。因此,如果MyUserControl.xaml包含这样的内容:

<TextBlock Text="{Binding Path=Name}" />

然后它将绑定到两个不同用户控件实例中两个不同源对象的Name属性。

这解决了您声明的要求,即每个用户控件“必须绑定到不同的数据源。”