У меня есть следующая DataGrid:
<DataGrid Grid.Row="2" ItemsSource="{Binding Rejects}" AutoGenerateColumns="False" Style="{StaticResource DataGridStyle}" ColumnHeaderStyle="{StaticResource DataGridHeaderStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="First column" Binding="{Binding Id}"/>
</DataGrid.Columns>
</DataGrid>
ItemsSource связан со свойством моего ViewModel, называемым Rejects, которое является ObservableCollection объектов Dummy.
Вот стиль, называемый DataGridHeaderStyle:
<Style x:Key="DataGridHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Height" Value="30"/>
<Setter Property="Background" Value="{StaticResource EasternBlueBrush}"/>
<Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource DarkGreyBrush}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="10 0"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<ControlTemplate.Resources>
<converters:DebugConverter x:Key="DebugConverter"/>
</ControlTemplate.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Background="{TemplateBinding Background}" Padding="5">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock x:Name="SortArrow" Margin="0 0 5 0"/>
<ContentPresenter Content="{Binding}"/>
</StackPanel>
</Border>
<Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1"
HorizontalAlignment="Right"
Width="2"
BorderThickness="1"
BorderBrush="{StaticResource EasternBlueBrush}"
Cursor="SizeWE"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ToolTip" Value="Click to sort."/>
<Setter Property="Background" Value="{StaticResource CuriousBlueBrush}"/>
</Trigger>
<Trigger Property="SortDirection" Value="Ascending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible"/>
<Setter TargetName="SortArrow" Property="Text" Value="↓"/>
</Trigger>
<Trigger Property="SortDirection" Value="Descending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible"/>
<Setter TargetName="SortArrow" Property="Text" Value="↑"/>
</Trigger>
<Trigger Property="SortDirection" Value="{x:Null}">
<Setter TargetName="SortArrow" Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я ожидал иметь только один столбец с именем «Первый столбец», но вот результат: Результат
Как вы можете видеть, там это другой столбец, называемый именем моей ViewModel, которая появляется. Это не происходит, когда я удаляю свойство Template. Кроме того, хотя этот новый столбец выглядит как другой, он не реагирует при зависании.
РЕДАКТИРОВАТЬ
Как я уже сказал в ответе @ ketan, я смог удалить странный заголовок столбца, установив для DataContext моей DataGrid значение {x: Null} и установив ItemsSource непосредственно из выделенного кода, что показывает, что проблема связана с DataContext DataGrid, но мне все еще нужно сохранить его Любая идея?
Кроме того, вот список, который я использую в качестве ItemsSource:
public ObservableCollection<Dummy> Rejects { get; set; } = new ObservableCollection<Dummy>()
{
new Dummy()
{
Id = 1,
Prop1 = "A"
},
new Dummy()
{
Id = 2,
Prop1 = "B"
}
};
РЕШЕНИЕ
Я наконец узнал, что происходит не так , Все это связано со свойством Content моего ContentPresenter внутри шаблона: я устанавливаю свойство Content вместо ContentSource. Таким образом, решение:
<ContentPresenter ContentSource="Header"/>