DataGridColumnHeader DataTemplate中的WPF绑定

时间:2011-08-17 02:18:26

标签: wpf templates xaml data-binding datagrid

因此,这是对以下问题的扩展:Style DataGridColumnHeader with Styles in WPF

简而言之,我试图通过使用组合框模板化列标题来在我的DataGridColumnHeaders中添加过滤器。所以与另一个例子的不同之处在于我正在使用ComboBox。

<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 个答案:

答案 0 :(得分:1)

DataGridColumnHeaders不会继承DataContext,因此无法绑定任何内容。使用RelativeSource代替绑定中的父DataGrid并指向DataContext.Codes

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