Привязка заголовка столбца DataGrid к DataContext - PullRequest
11 голосов
/ 17 января 2012

Я знаю, что этот вопрос задавался ранее, но ни один из "предыдущих" ответов, кажется, не работает для меня ...

Я реализовал функциональность для нескольких языков в своем приложении, и поэтому я имеючтобы привязать заголовок моих столбцов DataGrid к DataContext.

Я использую словарь (называемый «Текст» в примере ниже) в DataContext для хранения текстов, и привязка отлично работает с текстовыми блоками, кнопками и т. д.

<TextBlock Text="{Binding Text[Name], FallbackValue='Name'" />

Но я не могу заставить это работать с атрибутом Header столбцов DataGrid.

Я где-то читал, что мне нужно написать шаблон для столбца / заголовкачтобы достичь этого, но я не могу понять это тоже.

Ответы [ 2 ]

32 голосов
/ 17 января 2012

Возможно, вам придется пройти вверх по дереву, чтобы получить нужный DataContext:

<DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DataContext.Text[Name],
                       RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

Выполнение этого непосредственно в свойстве Header не будет работать, поскольку его нельзя разрешить на месте, поскольку столбец является абстрактным объектом, отсутствующим в дереве.

4 голосов
/ 06 мая 2013

правильно. нет элемента в визуальном дереве, напрямую отображающегося на DataGridTextColumn, поэтому вы не можете использовать RelativeSource с AncestorType (т.е. DataGridTextColumn не является элементом управления, следовательно, у него нет родительского элемента управления). код ниже должен работать нормально

<DataGridTextColumn Binding="{Binding Name}">
  <DataGridTextColumn.Header>
    <TextBlock Text="{Binding DataContext.Text[Name],
                      RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
  </DataGridTextColumn.Header>
</DataGridTextColumn>
...