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>

次に、データテンプレートのバインディングパスの値を取得します。この場合、「City」という値を取得したいと思います。

ヒントをいただければ幸いです。

4

2 に答える 2

1

まず、CellTemplate 内の TextBlock に到達する必要があります。

実際には@blindmeisの答えが手がかりを与えていますが、サンプルでは別のアプローチで説明しようとします.

たとえば、コード ビハインドでは、TextBlock が MouseDoubleClick イベントであるオブジェクトに到達しようとします。

e.OriginalSource; を使用して TextBlock オブジェクトに到達できます。

次に、 BindingOperations.GetBinding(.. , ..).Path.Path は、探しているものを提供します...

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

その後、最初の方法または2番目の方法を使用できます。

最初の方法 (注意。最初のパス式の前に疑問符があります):

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

2 番目の方法:

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

var bindingPath = binding.Path.Path;
于 2016-08-15T11:54:03.217 に答える