WPF не позволит мне поставить привязку на пути привязки - есть ли другой способ? - PullRequest
5 голосов
/ 21 июля 2009

У меня есть DataTemplate, который я использую как CellTemplate для GridViewColumn.

Я хочу написать что-то вроде этого для DataTemplate:

<DataTemplate
    x:Key="_myTemplate">
    <TextBlock
        Text="{Binding Path={Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewColumn}}, Path=Header}}" />
</DataTemplate>

Мой GridView привязан к DataTable, и я хочу привязать к столбцу DataTable, имя которого равно Заголовку GridViewColumn, к которому прикреплен DataTemplate. [Я надеюсь, что это имело смысл!]

К сожалению, это не работает. Я получаю XamlParseException: «Невозможно установить« Binding »в свойстве« Path »типа« Binding ».« Binding »можно установить только в DependencyProperty объекта DependenceyObject."

Как мне это настроить?

Редактировать (повышение комментария DanM к вопросу)

Мне в основном нужен DataTemplate, привязка которого определяется DataContext и к какому столбцу прикреплен DataTemplate. Есть ли альтернатива?

Ответы [ 2 ]

0 голосов
/ 22 июля 2009

Разве вы не хотите этого?

{Binding Path=Header, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GridViewColumn}}}
0 голосов
/ 21 июля 2009

Вы не можете назначить привязку только для любого свойства. Свойство должно иметь тип Binding или быть реализовано как свойство зависимости для объекта.

Свойство Path класса Binding имеет тип PropertyPath, и Binding не реализует свойство Path как свойство зависимости. Следовательно, вы не можете динамически связать Путь так, как вы пытаетесь.

Редактировать

В основном вы хотите встроить метаданные в связанные данные, которые определяют конфигурацию DataTemplate. Это не может быть сделано только в XAML. Вам понадобится хоть какая-то поддержка из кода.

Мне кажется, что лучшим подходом будет использование ViewModel. Это упрощает привязку в XAML и подталкивает это решение «что связывать с чем» в код ViewModel.

...