如何使用WPF Bindings达到几个级别

时间:2012-08-29 12:44:15

标签: c# .net wpf data-binding relativesource

这是我在WPF中开发复杂控件时经常遇到的问题。

我想将一些属性绑定到多个父级别。

我目前正在使用RelativeSource和TemplatedParent:

Value="{Binding PropertyToBind, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"

但是有了这个,你可以绑定到直接父级,我有4个级别......所以我做了4个绑定,最终绑定到了好的值。

我无法删除我的4级对象,它们是复杂的控件......

例如,我的第一级是我的操纵杆控件。在我的操纵杆中,我有一个Slider控件(第二级)来上下移动。在我的Slider中,我有一个Button(第三级)。在我的按钮中,我有一个文本(第4级),我想要绑定到我的等级1(操纵杆)中的符号。

我所做的是将文本绑定到按钮中的属性,然后将按钮的属性绑定到Slider等中的属性到操纵杆。有时,我需要创建自定义控件(添加属性,我可以绑定)。

这不是我的情况,它只是一个例子(是的,我们可以删除一些级别,但不是我的)我不想回答:删除这个或这个对象......

有没有办法直接绑定到多个级别?每个级别都是Style中的ControlTemplate。

我正在使用WPF 4,.NET 4.0,Blend 4,Visual Studio 2010

2 个答案:

答案 0 :(得分:2)

你不应该这样做,它打破了封装并介绍了不必要的依赖。你描述的是要走的路:

  

我所做的是将文本绑定到按钮中的属性,然后将按钮的属性绑定到Slider中的属性等。

答案 1 :(得分:1)

您是否尝试过绑定中RelativeSource的其他排列?具体来说,您可以使用RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type SomeType}}查找上方的特定控件,看起来它可能适用于您的方案。