Необходимо привязать свойство IsChecked ContextMenu к свойству Visibility DataGridTextColumn.
ContextMenu
<Control.Resources>
<ResourceDictionary>
<ContextMenu x:Key="ColumnHeaderMenu">
<MenuItem x:Name="MI_IdInstruction" Header="Id_Instruction" IsCheckable="true" IsChecked="True"/>
</ContextMenu>
</ResourceDictionary>
</Control.Resources>
DataGrid
<DataGrid ItemsSource="{Binding Instructions}" SelectedItem="{Binding SelectedItem}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ContextMenu" Value="{StaticResource ColumnHeaderMenu}"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding IdSI}"
Header="IdSI_Header"
IsReadOnly="True"
Visibility ="{Binding IsChecked, Converter={StaticResource converterVisibility}, ElementName=MI_IdInstruction , Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
Converter
class ConverterVisibility : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
}
Я понял что проблемам в том что Контекстное меню из за того что находиться в ресурсах не входит в дерево построения. Как лучше сделать такую привязку?
x:Reference, как здесь: https://ru.stackoverflow.com/a/866493/218063 ? – Андрей NOP Jun 09 '19 at 19:24