【问题标题】:What is the best approach for creating binding at runtime?在运行时创建绑定的最佳方法是什么?
【发布时间】:2010-11-04 14:36:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 无意冒犯,但我想知道您最终是如何不得不动态创建绑定的。
  • 用户自己必须创建 UI 和数据源之间的绑定。在创建应用程序期间,我不知道需要什么确切的 DP 以及哪个对象绑定到哪个数据源。所以我需要动态创建它们。

标签: wpf data-binding xaml dependency-properties


【解决方案1】:

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

至于使用 DP,我不确定您在问什么。 DP 本身是静态的,但 DP 的值与每个实例相关联。否则,多个 TextBox 实例怎么会有不同的 Text 值呢?绑定也特定于每个实例。

【讨论】:

  • 你是对的。抱歉,我的意思略有不同。我的意思是如何创建不存在的 DP 并为每个对象实例分配它们?
【解决方案2】:

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

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

拥有特定用户控件的多个实例并且每个实例绑定到不同的源对象是非常常见的。您可以使用 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 属性。

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

【讨论】:

  • 在我的例子中,用户指定绑定路径,使用拖放界面,然后我以编程方式检索绑定并重新分配给用户控件。
猜你喜欢
  • 1970-01-01
  • 2016-12-15
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2017-04-13
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多