我已经看过很多关于这个话题的未答复的帖子,但是我仍然倾向于相信这里有人想出这个并坚持我们其他人。
我有一个DataGrid,它包含模板列和文本列的混合。我只需要一种方法将标头绑定到viewmodel中的属性,以便我可以为不同的语言使用不同的字符串。
我看过WPF datagrid header text binding以及从中链接的每个帖子。这里建议的方法都不适用于Silverlight。
没有人有任何想法吗?
答案 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个列标题,所以稍微整理了一下。