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

问题描述:

在我的应用程序中,我想在运行时创建绑定,并且每个对象都必须有单独的绑定。在运行时创建绑定的最佳方法是什么?

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

而且依赖属性是静态的,它不允许每个实例有一个DP,每个类只有一个DP。

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

+0

没有冒犯,但我想知道如何最终不得不动态创建绑定。 – 2010-11-04 15:49:43

+0

用户自己必须在UI和数据源之间创建绑定。在创建应用程序的过程中,我不知道需要什么确切的DP以及哪个对象绑定到哪个数据源。所以我需要动态创建它们。 – Vitalij 2010-11-05 09:29:25

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

至于使用DP,我不知道你在问什么。 DP本身是静态的,但DP的值与每个实例相关联。否则,多个TextBox实例如何具有不同的文本值?绑定也是针对每个实例的。

+0

你说得对。对不起,我的意思稍有不同。我的意思是如何创建不存在的DP并为每个对象的实例分配它们? – Vitalij 2010-11-05 09:31:00

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

我问,因为你要求的解决方案 - 在运行时创建一个绑定 - 可能是不必要的复杂。您通常不需要在运行时创建绑定来解决您所描述的问题。从迄今为止关于这个问题所说的话来看,这听起来像一个更简单的解决方案应该工作。

拥有特定用户控件的多个实例并将每个实例绑定到不同的源对象是非常普遍的。您可以使用Xaml中的正常数据绑定表达式来完成此操作。诀窍是依靠DataContext来确定哪个特定的每个用户控件用作其源。例如:

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

这将创建一个自定义用户控件,的MyUserControl的两个实例,并在第一个的任何绑定会附着在任何物体在源1,而第二个将使用源2。所以,如果MyUserControl.xaml包含这样的事情:

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

然后将结合两个不同源对象的两个不同的用户控件实例的名称属性。

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

+0

在我的情况我用户指定绑定的路径,使用拖放界面,然后我以编程方式检索绑定并重新分配给用户控件。 – Vitalij 2010-11-05 09:33:51