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

Wpf 在运行时创建绑定的最佳方法是什么?,wpf,data-binding,xaml,dependency-properties,Wpf,Data Binding,Xaml,Dependency Properties,在我的应用程序中,我希望在运行时创建绑定,每个对象都必须有一个单独的绑定 例如:我有一个UserControl的两个副本,每个副本都有属性文本,并且必须绑定到不同的数据源 由于依赖属性是静态的,它不允许每个实例有一个DP,每个类只有一个DP 所以我想知道实现它的最佳方法是什么?要动态处理数据绑定,请查看静态类 至于使用DPs,我不知道你在问什么。DP本身是静态的,但DP的值与每个实例相关联。否则,多个TextBox实例如何具有不同的文本值?绑定也特定于每个实例。要动态处理数据绑定,请查看静态类

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

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

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


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

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


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

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


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

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

我这样问是因为您所请求的解决方案(在运行时创建绑定)可能过于复杂。您通常不需要在运行时创建绑定来解决您描述的问题。从你到目前为止对这个问题所说的话来看,似乎一个简单得多的解决方案应该可行

一个特定用户控件有多个实例,并且每个实例都绑定到不同的源对象,这是非常常见的。您可以使用Xaml中的普通数据绑定表达式来实现这一点。诀窍是依赖于来确定每个用户控件使用哪个特定的控件作为其源。例如:

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

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

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

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


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

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

我这样问是因为您所请求的解决方案(在运行时创建绑定)可能过于复杂。您通常不需要在运行时创建绑定来解决您描述的问题。从你到目前为止对这个问题所说的话来看,似乎一个简单得多的解决方案应该可行

一个特定用户控件有多个实例,并且每个实例都绑定到不同的源对象,这是非常常见的。您可以使用Xaml中的普通数据绑定表达式来实现这一点。诀窍是依赖于来确定每个用户控件使用哪个特定的控件作为其源。例如:

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

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

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

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


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

没有冒犯,但我想知道您最终如何动态创建绑定。用户自己必须在UI和数据源之间创建绑定。在创建应用程序的过程中,我不知道需要什么确切的DP,以及哪个对象绑定到哪个数据源。所以我需要动态地创建它们。无意冒犯,但我想知道您最终如何必须动态地创建绑定。用户自己必须在UI和数据源之间创建绑定。在创建应用程序的过程中,我不知道需要什么确切的DP,以及哪个对象绑定到哪个数据源。所以我需要动态地创建它们。你是对的。对不起,我的意思有点不同。我的意思是如何创建不存在的DP并为每个对象实例分配它们?你是对的。对不起,我的意思有点不同。我的意思是如何创建不存在的DP并为每个对象实例分配它们?在我的示例I中,用户使用拖放界面指定绑定路径,然后我以编程方式检索绑定并重新分配给用户控件。在我的示例I中,用户使用拖放界面指定绑定路径,然后我以编程方式检索绑定并重新分配给用户控件。