【问题标题】:WPF: Find bindings domain object propertyWPF:查找绑定域对象属性
【发布时间】:2011-05-23 15:08:02
【问题描述】:

是否有一种简单的方法来确定域对象中的属性是否绑定到 WPF 元素,如果是,那么是哪个元素和属性?

例如,假设我有一个带有 TextBox 的 UserControl,并且我将控件的“Text”属性绑定到域对象的“Description”属性。仅给定域对象属性的名称(“描述”),如何检索该属性的 BindingExpression?

【问题讨论】:

  • 来自域对象的上下文还是来自用户控件的上下文?

标签: wpf data-binding binding


【解决方案1】:

不,没有简单的方法可以做到这一点。绑定不起作用,您的属性可以绑定到多个元素的多个依赖属性并且对此一无所知。您基本上必须遍历 VisualTree,枚举每个 FrameworkElement 的依赖属性,获取 BindingExpressions 并比较 Binding 的路径以查看它是否与您正在搜索的属性名称匹配。除此之外,您还必须将 DataContext 与对象进行比较。我仍然可以想到很多情况都会失败,例如绑定中并不总是使用路径,您可以直接使用 DataContext。

无论如何,这里有一个link,它的实现实际上就是这样做的。我试了一下,它可以工作,但只用一个包含 4 列和 10 行的 DataGrid 完成搜索大约需要 2 秒。虽然它不执行 DataContext 检查,但我将其添加到我的测试应用程序中,但我不会发布代码,因为我认为您不会使用它。如果你想要它,请告诉我,我会发布它。

【讨论】:

  • 我希望这不是唯一的选择;我至少可以希望通过使用 FrameworkElement.GetLocalValues 来仅检索设置了值的那些属性来加快该过程,但是正如您所说,这不会特别有效。
  • @Martin Robins:不久前我也需要类似的东西。如果您找到更好(甚至优化)的方法,请务必更新
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多