Скрыть / показать столбец DataGrid, щелкнув правой кнопкой мыши заголовок в WPF Xaml

У меня есть DataGrid, и я хочу щелкнуть правой кнопкой мыши заголовки, чтобы иметь возможность скрыть или показать выбранный столбец. У меня есть мой код xaml ниже. (используя Datagrid, где я связываю видимость Заголовка) Мой код будет показывать MenuItem, даже когда я щелкаю правой кнопкой мыши по строкам. Я хочу показать элементы меню и выбрать или отменить выбор столбцов для отображения или скрытия ТОЛЬКО при нажатии правой кнопки мыши на заголовках. Я хочу сделать это в xaml и привязать его к моему коду MVVM (в C#).

(прокси указывает на класс BindingProxy, в котором я могу связать видимость каждого столбца)

<DataGrid
                      ItemsSource="{Binding Path=DataGridRows}"
                      AutoGenerateColumns="False"
                      AlternationCount="2">

                <DataGrid.Resources>
                    <proxy:BindingProxy x:Key="Column1Visibility" Data="{Binding Column1Visibility"/>
                    <proxy:BindingProxy x:Key="Column2Visibility" Data="{Binding Column2Visibility}"/>
                    <proxy:BindingProxy x:Key="Column3Visibility" Data="{Binding Column3Visibility}"/>


                    <Style x:Key="DataGridHeaderAlignment" TargetType="DataGridColumnHeader">
                        <Setter Property="HorizontalAlignment" Value="Stretch"/>
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                    </Style>
                </DataGrid.Resources>

                <DataGrid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Find" Command="{Binding ButtonClicks}" CommandParameter="find" />
                        <MenuItem Header="Delete" IsCheckable="True" Command="{Binding DeleteItem}" />
                    </ContextMenu>
                </DataGrid.ContextMenu>

                <DataGrid.Columns>

                    <DataGridTextColumn Width="98" Header ="column 1" HeaderStyle="{StaticResource DataGridHeaderAlignment}" Binding="{Binding Column1}"  Visibility="{Binding .Data, Source={StaticResource Column1Visibility}}/>
                    <DataGridTextColumn Width="88"  Header="column 2" HeaderStyle="{StaticResource DataGridHeaderAlignment}" Binding="{Binding Column2}"  Visibility="{Binding .Data, Source={StaticResource Column2Visibility}}/>
                    <DataGridTextColumn Width="88" Header="column 3" HeaderStyle="{StaticResource DataGridHeaderAlignment}" Binding="{Binding Column3}"  Visibility="{Binding .Data, Source={StaticResource Column3Visibility}} />
                </DataGrid.Columns>
            </DataGrid>

0 ответов

Другие вопросы по тегам