2012-04-17 91 views
2

我在这个主题上看到了很多未回复的帖子,但我仍然倾向于相信这里有人想出了这件事,并且对我们其他人持怀疑态度。在Silverlight中绑定DataGrid列标题

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

我看过WPF datagrid header text binding以及从它链接的每一篇文章。这里建议的方法都不适用于Silverlight。

没有人有任何想法吗?

+0

找到答案http://blogs.claritycon.com/blog/2011/03/07/datagridcolumn-bindable-header-for-localization-support-in-silverlight-4/ – Josh 2012-04-17 19:20:38

回答

0

我最近也花了一些时间在这方面工作,这里是我如何让它为其他人的利益工作。

首先声明名称空间向上,这样我可以在xaml中简短地指定它。

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

然后我声明了标题样式的静态资源往上顶,以保持数据网格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> 

然后在您的数据网格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个标题设置。