Wpf 从DataGridTemplateColumn中获取绑定表达式';代码隐藏中的Cells模板

Wpf 从DataGridTemplateColumn中获取绑定表达式';代码隐藏中的Cells模板,wpf,binding,datagrid,code-behind,datagridtemplatecolumn,Wpf,Binding,Datagrid,Code Behind,Datagridtemplatecolumn,我正在寻找在代码隐藏中从DataGridTemplateColumn的CellTemplate中读取绑定表达式的可能性。 我的模板列如下所示: <DataGridTemplateColumn x:Name="..." Header="..."> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Path=City}" Style="..

我正在寻找在代码隐藏中从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>

现在,我想获取datatemplate中绑定路径的值。在这种情况下,我希望得到值“City”


任何提示都将不胜感激。

如果您想知道如何使用路径值,那就太好了

这是一个类似问题的答案

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

首先,您必须到达CellTemplate中的TextBlock

实际上,@blindmeis”的回答提供了一个线索,但我将尝试在一个样本中用不同的方法进行解释

例如,在代码隐藏中,您尝试在MouseDoubleClick事件上访问TextBlock的对象

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

然后,BindingOperations.GetBinding(..,..).Path.Path将为您提供您要查找的内容

var tb = (e.OriginalSource as TextBlock);
if (tb == null)
    return;
之后,您可以使用第一种方式或第二种方式:

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

var bindingPath = binding.Path.Path;
第一种方式(注意,在第一条路径表达式前有一个问号):

第二种方式:

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

var bindingPath = binding.Path.Path;

看看这个帖子。我希望这会有帮助。您好,blindmeis,我正在为DataGrids编写一个excel导出,我正在为此使用绑定值,但我在获取所有模板列的值时遇到问题。对于普通列,我使用以下值获取值:if(gridColumn是DataGridBoundColumn){Binding Binding=((DataGridBoundColumn)gridColumn)。Binding as Binding;}