2010-12-10 163 views
0

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

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

+0

从域对象的上下文或从用户控件的上下文? – 2010-12-10 17:44:08

回答

1

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

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

+0

我希望这不是唯一的选择;我至少希望通过使用FrameworkElement.GetLocalValues来检索仅设置了值的属性,但希望通过这种方式来加快进程速度,但正如你所说,这不会特别有效。 – 2010-12-14 17:13:55

+0

@马丁罗宾斯:我需要一些类似的东西。如果你找到了更好的(甚至是最优化的)方法,那么一定要更新 – 2010-12-14 18:14:03