0

我正在寻找一种可能性,可以在后面的代码中从 DataGridTemplateColumn 的 CellTemplate 中读取绑定表达式。我的模板列如下所示:

<DataGridTemplateColumn x:Name="..." Header="...">
<DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
    <TextBlock Text="{Binding Path=City}" Style="..."/>
  </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
  <DataTemplate>
    <ComboBox ... />
  </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

</DataGridTemplateColumn>

现在我想在数据模板中获取绑定路径的值。在这种情况下,我想获得“城市”的价值。

任何提示将非常感谢。

4

2 回答 2

1

首先,您必须到达 CellTemplate 内的 TextBlock。

实际上@blindmeis 的回答给出了一个线索,但我会尝试在示例中用不同的方法来解释。

例如,在后面的代码中,您尝试在 MouseDoubleClick 事件上到达 TextBlock 的对象。

您可以使用 e.OriginalSource 访问 TextBlock 对象;

然后, BindingOperations.GetBinding(.. , ..).Path.Path 会给你你在找什么......

var tb = (e.OriginalSource as TextBlock);
if (tb == null)
    return;

之后,您可以使用第一种方式或第二种方式:

第一种方式(注意。第一个Path表达式前有一个问号):

var bindingPath = BindingOperations.GetBinding(tb, TextBlock.TextProperty)?.Path.Path;

第二种方式:

var binding = BindingOperations.GetBinding(tb, TextBlock.TextProperty);
if (binding == null)
    return;

var bindingPath = binding.Path.Path;
于 2016-08-15T11:54:03.217 回答
0

很高兴知道您想对路径值做什么。

是一个类似问题的答案。

编辑:太好了,我不久前写了一个 excel 转换器 :) 但我的版本不支持绑定点表示法和 TemplateColumns。TemplateColumns 的问题在于您不知道是否有 1 个或多个绑定以及可视化树的外观。也许在第一步中,您可以沿着模板列的可视化树走到第一个绑定并获取它。

于 2011-12-14T10:40:21.680 回答