话不多说,直接上代码吧。
<local:VisibilityToBooleanConverter x:Key="visibilityToBooleanConverter" />
<ContextMenu x:Key="columnChooserMenu" x:Shared="False"
DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}"
ItemsSource="{Binding Columns, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="AutomationProperties.Name" Value="{Binding Header}"/>
<Setter Property="IsCheckable" Value="True" />
<Setter Property="IsChecked" Value="{Binding Visibility, Mode=TwoWay, Converter={StaticResource visibilityToBooleanConverter}}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ContextMenu" Value="{StaticResource columnChooserMenu}"/>
</Style>
主要思想来源于下面这篇文章