Получение выражения привязки из CellTemplate объекта DataGridTemplateColumn в выделенном фрагменте кода - PullRequest
0 голосов
/ 14 декабря 2011

Я ищу возможность прочитать выражение привязки из CellTemplate DataGridTemplateColumn в коде позади.Мои столбцы шаблона выглядят так:

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

</DataGridTemplateColumn>

Теперь я хочу получить значение пути привязки в шаблоне данных.В этом случае я хотел бы получить значение «Город».

Любые советы будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 15 августа 2016

Сначала вы должны достичь TextBlock внутри CellTemplate.

На самом деле ответ @blindmeis даёт подсказку, но я попытаюсь объяснить другой пример в примере.

В коде позади, например, вы пытаетесь достичь объекта, который TextBlock по событию MouseDoubleClick.

Вы можете получить доступ к объекту TextBlock, используя e.OriginalSource;

Затем BindingOperations.GetBinding (.., ..). Path.Path даст вам то, что вы ищете ...

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

После этого вы можете использовать первый или второй способ:

Первый способ (Внимание. Перед первым выражением пути стоит вопросительный знак):

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;
0 голосов
/ 14 декабря 2011

было бы хорошо узнать, что вы хотите сделать со значением пути.

здесь - это ответ на аналогичный вопрос.

РЕДАКТИРОВАТЬ: это хорошо, яНекоторое время назад написал конвертер Excel :), но моя версия не поддерживает нотацию Binding dot и TemplateColumns.проблема с TemplateColumns заключается в том, что вы не знаете, имеют ли они 1 или более привязок и как выглядит визуальное дерево.возможно, на первом шаге вы можете пройти вниз по визуальному дереву столбца шаблона к первой привязке и взять его.

...