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

Binding to a Binding: Data Binding indirection -or- Metabinding in WPF

除了举例无法解释这个问题:

假设您有一个自定义 UserControl,其中包含两个 DependencyPropertyStatList Statsstring ImportantStat。用户控件的工作是显示 table,显示 Stats 中的所有值,但对 ImportantStat.

进行特殊视觉处理(如饼图)

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

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

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

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

那么,有什么方法可以实现我的目标吗?随意打破我在第一段中的假设。也许,例如,ImportantStat 不能是 string 但它本身必须是 Binding.

编辑:尝试 #1 失败

我希望从代码隐藏中公开一个新的 DependencyProperty Binding ImportantStatBinding 可以让我将 XAML 重写为:

<PieChart Value="{Binding ImportantStatBinding, RelativeSource=... }"/>

...但无济于事。间接 Binding 只是陷入 Value 本身,没有尝试解决它。​​

我的备份解决方案(可能就是这个方向)将只是在我可以直接访问 ImportantStat 的代码隐藏中创建内容,因此可以通过单个 Binding.

据我所知,如果没有额外的代码,就无法以这种方式连接数据绑定。更简单地说,我们可以有以下形式的数据绑定(当然):

A --> B --> C

但您不能具有以下形式的数据绑定:

A --> B --> *A(*A表示目标取决于A的值)

因为必须修复关系。

似乎可以创建一个 Converter,其工作是通过使用一些额外的上下文和该字符串作为 属性路径。这听起来与类型问题有关,所以我选择了我能想到的唯一其他方式:

我在后面的代码中为 PieChart 添加了一个新的 DependencyProperty 并确保我在适当的时间构建它,以便 XAML 可以使用它。这很丑陋,但它有效。我只是觉得内心有点死气沉沉:)希望有一天有人会觉得这有用。