Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binding DataGrid column Header to DataContext

I know this question has been asked before, but none of the "previous" answers seems to work for me...

I have implemented a functionality for multi languages in my application, and I therefor have to bind the header of my DataGrid columns to the DataContext.

I use a dictionary (called Text in the example below) in the DataContext to store the texts, and the binding works fine with textblocks, buttons etc.

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

But, I can't get this to work on the Header-attribute of the DataGrid columns.

I read somewhere, that I need to write a template for the column/header to achieve this, but I can't figure this out either.

like image 770
Christian Tang Avatar asked Jan 17 '12 08:01

Christian Tang


2 Answers

You may need to walk back up the tree to get the DataContext you want:

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

Doing this directly on the Header property will not work because it cannot be resolved in-place as the column is an abstract object not appearing in the tree.

like image 137
H.B. Avatar answered Oct 12 '22 16:10

H.B.


correct. there is no elemet in visual tree directly mapping to DataGridTextColumn so you can't use RelativeSource with AncestorType (i.e. DataGridTextColumn is not a control hence it doesn't have a parent control). below code should work fine

<DataGridTextColumn Binding="{Binding Name}">
  <DataGridTextColumn.Header>
    <TextBlock Text="{Binding DataContext.Text[Name],
                      RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
  </DataGridTextColumn.Header>
</DataGridTextColumn>
like image 5
bo chen Avatar answered Oct 12 '22 17:10

bo chen