如何将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)。
答案 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>