因此,这是对以下问题的扩展: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中的属性的问题,如上所示,但我无法让它工作。我的第二个问题是如何更改代码以便我可以绑定到每列的不同值?
答案 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>