如何从Silverlight DataGrid的Header属性中的DataBind

时间:2010-09-20 12:17:34

标签: silverlight datagrid silverlight-4.0

如何将DataGridTemplateColumn(或DataGridTextColumn)的“Header”属性绑定到Silverlight 4的DataGrid中ViewModel的某些文本属性?

“理想”解决方案(不起作用):

<sdk:DataGrid AutoGenerateColumns="False" ...>
  <sdk:DataGrid.Columns>
    <sdk:DataGridTemplateColumn Header="{Binding MyViewModelProperty}" >

我听说Header属性不是FrameworkElement,因此无法直接使用DataBinding。在SL 4中Header属性仍然没有FrameworkElement吗?至少Blend 4不希望在Header属性上使用DataBind。

现在有一个“好”的解决方法,不需要代码隐藏文件中的脏黑客攻击吗?也许使用从DataGridTemplateColumn派生的类?怎么可能这样做?

我更喜欢完全在XAML中运行的解决方案。到目前为止,我在stackoverflow(和网络)上找到的并没有解决我的问题(例如Databinding the DataGrid column header in code)。

2 个答案:

答案 0 :(得分:0)

SL4仍然如此 - 绑定必须是Framework元素。 您有一个选项是使用AutoGenerateColumns =“True”和System.ComponentModel.DataAnnotations命名空间中的属性(如DisplayAttribute)来定义列名。

答案 1 :(得分:0)

您可以像这样覆盖HeaderStyle。这将在标题中显示您的绑定文本。

<sdk:DataGridTextColumn Binding="{Binding SomeValue}" >
   <sdk:DataGridTextColumn.HeaderStyle>
      <Style TargetType="sdk:DataGridColumnHeader">
         <Setter Property="ContentTemplate">
            <Setter.Value>
               <DataTemplate>
                  <TextBlock Text="{Binding MyViewModelProperty}}" />
               </DataTemplate>
            </Setter.Value>
         </Setter>
      </Style>
    </sdk:DataGridTextColumn.HeaderStyle>                            
</sdk:DataGridTextColumn>