通过复选框选择/取消选择数据网格行

时间:2018-11-16 00:01:58

标签: c# wpf

我有一个数据网格,其中一列是复选框。我还定义了一个标题复选框,选中该复选框将选择所有其他复选框。绑定完全写在我的视图的xaml文件中。

我也有一个“ SelectionChanged”回调,可以根据所选行中的一堆值动态生成ContextMenu选项。

这是我的xaml:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
  name: myrole
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- nonResourceURLs:
  - /metrics
  - /api/*
  verbs:
  - get

现在,我还希望在选中/取消选中数据网格时自动选择/取消选中该数据网格。我尝试过的一种可能的方法是使用类似的内容:

    <DataGrid x:Name="SelectionTestList"
                ItemsSource="{Binding SelectionTests.Values}"
                SelectionChanged="SelectionTestList_OnSelectionChanged">
        <DataGrid.ContextMenu>
            <ContextMenu ItemContainerStyle="{StaticResource ContextMenuItemStyle}" 
                         ItemsSource="{Binding MenuOptions, Mode=OneWay}">
            </ContextMenu>
        </DataGrid.ContextMenu>
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <CheckBox
                        x:Name="SelectAllCheckBox">
                    </CheckBox>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox
                            IsChecked="{Binding IsChecked, ElementName=SelectAllCheckBox, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn
                Header="Criteria A"
                IsReadOnly="True"
                Binding="{Binding CriteriaA, Mode=OneWay, StringFormat=D2}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="HorizontalAlignment" Value="Center" />
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            ...more columns
        </DataGrid.Columns>
    </DataGrid>

但这摆脱了我使用“ SelectAllCheckBox”设置的先前行为。

是否有一种方法可以合并我想要的两个复选框行为? (即,根据行的复选框来选择/取消选择行,并具有“全选”复选框以选择所有复选框(从而选择所有行)) 在视图的背后代码或绑定的视图模型中实现起来会更容易吗?

0 个答案:

没有答案