I am trying to show/hide columns of a datagrid via a context menu. I was trying to use bindings for it, with this XAML:
<Grid>
<DataGrid AutoGenerateColumns="False" Name="dataGrid1">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Show Column 1" IsCheckable="True"
x:Name="showcol1" IsChecked="True" />
<MenuItem Header="Show Column 2" IsCheckable="True"
x:Name="showcol2" IsChecked="False" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="Col 0" />
<DataGridTextColumn Header="Col 1"
Visibility="{Binding ElementName=showcol1,
Converter={StaticResource BooleanToVisibilityConverter},
Path=IsChecked}" />
<DataGridTextColumn Header="Col 2"
Visibility="{Binding ElementName=showcol2,
Converter={StaticResource BooleanToVisibilityConverter},
Path=IsChecked}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
I even experimented with the other options, such as BindsDirectlyToSource=True
and UpdateSourceTrigger=PropertyChanged
. However, the columns do not change their visibility when I check/uncheck the menuitems. What am I doing wrong? Is this actually possible in pure XAML?
In this question, the answer uses x:Reference
. I tried that too but received the error
Service provider is missing the INameResolver service.
Google told me that this is a bug in VS2010? What can I do to resolve this? Or is my best shot to switch to VS2012?