Как выполнить привязку данных из свойства заголовка Silverlight DataGrid

Как можно привязать свойство «Заголовок» DataGridTemplateColumn (или DataGridTextColumn) к некоторому текстовому свойству ViewModel в DataGrid Silverlight 4?

«Идеальное» решение (что не работает):

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

Я слышал, что свойство Header не является FrameworkElement и поэтому не может напрямую использовать DataBinding. Свойство Header по-прежнему не имеет FrameworkElement в SL 4? По крайней мере, Blend 4 не хочет привязать DataBind к свойству Header.

Есть ли «хороший» обходной путь, который не требует грязных взломов в коде файла? Может быть, использовать класс, производный от DataGridTemplateColumn? Как это могло быть сделано?

Я бы предпочел решение, полностью работающее на XAML. То, что я нашел в stackoverflow (и в Интернете), пока не решило мой вопрос (например, Привязка данных к заголовку столбца DataGrid в коде).


person mkva    schedule 20.09.2010    source источник
comment
Я пробовал это с помощью Telerik DataGrid (который, по-видимому, является набором инструментов MS DataGrid под капотом), и свойство Header действительно не было привязано. Мне будет интересно, какие ответы вы получите так +1.   -  person Gone Coding    schedule 20.09.2010


Ответы (2)


Это по-прежнему верно для SL4 - привязки должны быть к элементам Framework. Один из возможных вариантов - использовать AutoGenerateColumns = "True" и атрибуты в пространстве имен System.ComponentModel.DataAnnotations, например DisplayAttribute, для определения имен столбцов.

person Michael S. Scherotter    schedule 20.09.2010

Вы можете переопределить 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>
person HatAndBeard    schedule 27.09.2011