绑定到绑定:数据绑定间接 - 或 - WPF中的元代理

时间:2015-02-08 20:08:09

标签: c# wpf xaml data-binding

除示例外无法解释此问题:

假设您有一个自定义UserControl,其中包含两个DependencyPropertyStatList Statsstring ImportantStat。用户控件的工作是显示一个表格,显示Stats中的所有值,但ImportantStat具有特殊的视觉处理(如饼图)。

我的直觉是写一个看起来或多或少的XAML块:

<PieChart Value="{Binding Path={Binding ImportantStat} }"/>

其中DataContext先前设为Stats。因此,用户传递ImportantStat = "WinPercentage"并且饼图绑定到统计行的WinPercentage属性。但是用户可以轻松地选择其他一些属性来强调。

问题(当然,你已经知道这一点,受过良好教育的Stacker)是你收到一条错误消息,指出你无法从Binding转换为string,这就是外部{ {1}}预计Binding。虽然我没有向自己证明这一点,但我猜这只是因为Path不是Path

那么,有没有办法在这里实现我的目标?请随意在第一段中打破我的假设。也许,例如,DependencyProperty不能是ImportantStat,但必须是string

编辑:尝试#1失败

我希望从代码隐藏中揭示一个新的Binding DependencyProperty将允许我将XAML重写为:

Binding ImportantStatBinding

......但无济于事。间接<PieChart Value="{Binding ImportantStatBinding, RelativeSource=... }"/> 只是插入Binding本身而没有尝试解决它。​​

我的备份解决方案,可能就是这个问题的解决方案,只是在我可以直接访问Value的代码隐藏中创建内容,因此可以使用单个{{1} }

1 个答案:

答案 0 :(得分:0)

据我所知,没有额外的代码,就没有办法以这种方式连接数据绑定。为了更简单地解决问题,我们可以使用以下形式的数据绑定:

A - &gt; B - &gt; ç

但您无法对表单进行数据绑定:

A - &gt; B - &gt; * A(* A表示目标取决于A的值)

因为必须修复关系。

似乎有可能创建一个Converter,其作用是通过使用一些额外的上下文和该字符串作为属性路径实际解除引用Binding来将字符串转换为任意值。对于类型问题,这听起来很混乱,所以我选择了另一种我能想到的方式:

我为DependencyProperty添加了一个新的PieChart到后面的代码,并确保我在适当的时候构建它,以便XAML可以使用它。这很难看,但它确实有效。我只觉得里面有点死了:)希望有人在某一天发现这个有用。