views:

5004

answers:

3

I'm trying to bind DataColumn Header to DynamicResource using following code.

<Window.Resources>
    <sys:String x:Key="HeaderText">Header Text</sys:String>
</Window.Resources>
<Grid>
    <tk:DataGrid>
        <tk:DataGrid.Columns>
            <tk:DataGridTextColumn Header="{DynamicResource HeaderText}" Width="100"/>
        </tk:DataGrid.Columns>
    </tk:DataGrid>
</Grid>

But for some strange reason column header remains empty. StaticResource however works well. Could you please help me to figure out how to bind that Header property to some DynamicResource.

+3  A: 

Try this:

<Window.Resources>
    <sys:String x:Key="HeaderText">Header Text</sys:String>
    <Style x:Key="HeaderTextStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}">
       <Setter Property="Content" Value="{DynamicResource HeaderText}" />
    </Style>
</Window.Resources>
<Grid>
    <tk:DataGrid>
        <tk:DataGrid.Columns>
            <tk:DataGridTextColumn HeaderStyle="{StaticResource HeaderTextStyle}" Width="100"/>
        </tk:DataGrid.Columns>
    </tk:DataGrid>
</Grid>

WPF Toolkit's DataGrid has DataGridColumns which are not Visual controls, so they have some funny rules. One of those funny rules is that only the Binding property can be a Binding - everything else must be static. To circumvent this, you can create a Static Style Resource which contains Dynamic Content.

vanja.
A: 

If you just want to change the Header and dont' want to bother with styles, do this. (credit goes to above poster)

    <Window.Resources>
    <sys:String x:Key="HeaderText">Header Text</sys:String>
    <TextBlock x:Key="HeaderSR" Text="{DynamicResource HeaderText}"/>
</Window.Resources>
<Grid>
    <tk:DataGrid>
        <tk:DataGrid.Columns>
            <tk:DataGridTextColumn Header="{StaticResource HeaderSR}" Width="100"/>
        </tk:DataGrid.Columns>
    </tk:DataGrid>
</Grid>
Morris
A: 

thanks Vanja, had the same issue, and the trick worked just fine for me

David