Как привязать из DataGridColumn.Header к свойству ViewModel? - PullRequest
0 голосов
/ 28 сентября 2010

Я хочу связать свой заголовок сетки данных со свойством в DataContext сетки. Теперь я получил его на работу, но я считаю это временным решением:

    <DataGrid x:Name="grid" ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Description}">
                <DataGridTextColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding ElementName=grid, Path=DataContext.ItemsUnit}"></TextBlock>
                    </DataTemplate>

Самая большая проблема этого решения заключается в том, что оно делает привязку более хрупкой (контекстно-зависимой). Если DataContext сетки используется в сценарии мастер / подробности (что делает DataContext BindingList вместо одного элемента), мне придется заменить обновление DataGrid DataContext на DataContext={Binding /}.

Есть ли более надежный способ привязки из DataGrid.HeaderTemplate, чем использование ElementName и обращение к DataContext?

1 Ответ

0 голосов
/ 28 сентября 2010

Одним из простых решений было бы использование именованного ресурса

<UserControl.Resources>
  <ResourceDictionary>
    <MyNamespace:MyHeaderProvider x:Key="MyHeaderProvider">
  </ResourceDictionary>
</UserControl.Resources>

...

Header="{Binding Path=HeaderText, Source={StaticResource MyHeaderProvider}"

Если все действительно динамично, это может не сработать. Когда я создал сетку с более динамическими / управляемыми данными столбцами, я не определил их в XAML, но сгенерировал их в коде, где вам не нужно делать относительный DataContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...