在Silverlight中绑定DataGrid列标题

时间:2012-04-17 18:00:45

标签: data-binding silverlight-4.0 datagrid

我已经看过很多关于这个话题的未答复的帖子,但是我仍然倾向于相信这里有人想出这个并坚持我们其他人。

我有一个DataGrid,它包含模板列和文本列的混合。我只需要一种方法将标头绑定到viewmodel中的属性,以便我可以为不同的语言使用不同的字符串。

我看过WPF datagrid header text binding以及从中链接的每个帖子。这里建议的方法都不适用于Silverlight。

没有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我最近花了一些时间研究这个问题,以下是我如何让其他人受益。

首先将名称空间声明为top,这样我就可以在xaml中简单地指定它。

xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"

然后我将头样式声明为静态资源,以保持datagrid xaml清洁:

<navigation:Page.Resources>        
    <Style x:Key="NameStyle" TargetType="sdk:DataGridColumnHeader">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=LocalizedStrings.Name, Source={StaticResource Language}}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="DescriptionStyle" TargetType="sdk:DataGridColumnHeader">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=LocalizedStrings.Description, Source={StaticResource Language}}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</navigation:Page.Resources>

然后在您的datagrid xaml中,您可以简单地将DataGridTextColumns标头样式设置为静态资源标头样式。

<sdk:DataGrid.Columns>
    <sdk:DataGridTextColumn Width="Auto" FontSize="11" MinWidth="100" Binding="{Binding Name}" HeaderStyle="{StaticResource NameStyle}" />
    <sdk:DataGridTextColumn Width="1*" FontSize="11" Binding="{Binding Description}" HeaderStyle="{StaticResource DescriptionStyle}" />
</sdk:DataGrid.Columns>

我原来的解决方案来自这篇文章:Dynamically setting the Header text of a Silverlight DataGrid Column

因为我要设置15个列标题,所以稍微整理了一下。