Связывание WPF в DataGridColumnHeader DataTemplate - PullRequest
1 голос
/ 17 августа 2011

Итак, это расширение следующего вопроса: Style DataGridColumnHeader со стилями в WPF

Короче говоря, я пытаюсь поместить фильтры в мои DataGridColumnHeaders, создав шаблон заголовков столбцов с помощью комбинированного списка. Таким образом, разница с другим примером заключается в том, что я вместо этого использую ComboBoxes.

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="300" Width="300" Loaded="Window_Loaded">
<Window.Resources>
    <DataTemplate x:Key="MySpecialHeaderTemplate">
        <ComboBox ItemsSource="{Binding Codes}" />
    </DataTemplate>
</Window.Resources>
<Grid>
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn
                    Binding="{Binding Id}" />
            <DataGridTextColumn HeaderTemplate="{StaticResource MySpecialHeaderTemplate}"
                    Binding="{Binding Name}" />
            <DataGridTextColumn HeaderTemplate="{StaticResource MySpecialHeaderTemplate}"
                    Binding="{Binding Age}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

Мой вопрос касается привязки ComboBox к некоторым значениям. В настоящее время у меня возникают проблемы с привязкой ItemsSource к свойству в моей ViewModel, как показано выше, но я не могу заставить его работать. Второй вопрос: как мне изменить код, чтобы я мог связываться с разными значениями в столбце ??

1 Ответ

1 голос
/ 17 августа 2011

DataGridColumnHeaders не наследует DataContext, поэтому им не с чем связываться.Вместо этого используйте RelativeSource, чтобы найти родителя DataGrid в привязке, и укажите DataContext.Codes

<DataTemplate x:Key="MySpecialHeaderTemplate">
    <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                    Path=DataContext.Codes}" />
</DataTemplate>
...