【问题标题】:DataGridCheckBoxColumn Implement Check and Uncheck Functionality in XamlDataGridCheckBoxColumn 在 Xaml 中实现检查和取消检查功能
【发布时间】:2016-02-06 22:37:13
【问题描述】:

我的应用程序有一个 DataGridCheckBoxColumn,其中标题是一个复选框。 我正在尝试实现以下功能:

  1. 当用户选中标题复选框时,应选中整个列。
  2. 当用户取消选中列标题时,应取消选中整个 DataGridCheckBoxColumn。
  3. 当整个列被选中并且用户取消选中一个单元格时,标题也应该被取消选中。

不写代码就可以实现这个功能吗?

这是我用来创建 DataGridCheckbox 列的代码

 <DataGridCheckBoxColumn
     Binding="{Binding Path=IsSelected,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
     ElementStyle="{StaticResource DataGridCheckBoxStyle}" >
     <DataGridCheckBoxColumn.Header>
         <CheckBox
             IsChecked="{Binding Path=Data.AllItemsSelected, Source={StaticResource proxy}}"
             IsEnabled="{Binding Path=IsBusy, Converter={StaticResource BooleanNotConverter}}" />
     </DataGridCheckBoxColumn.Header>
 </DataGridCheckBoxColumn>

提前致谢

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    您应该使用DataGridRowHeader,而不是使用一列作为复选框,它旨在用于 SelectAll 列等目的。

    <DataGrid>
        <DataGrid.RowHeaderTemplate>
            <DataTemplate>
                <CheckBox x:Name="selectCheckBox"
                          Margin="2,0,0,0"
                          IsChecked="{Binding Path=IsSelected, 
                                              Mode=TwoWay,
                                              RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGridRow}}}">
                </CheckBox>
            </DataTemplate>
        </DataGrid.RowHeaderTemplate>
    
        <DataGrid.CommandBindings>
            <CommandBinding Command="SelectAll" Executed="CommandBinding_Executed" />
        </DataGrid.CommandBindings>
    </DataGrid>
    

    默认情况下,标题按钮将仅充当 SelectAll 按钮。为了允许它取消选择DataGrid.CommandBindings,还声明了更改 SelectAll 按钮的行为。在后面的代码中,声明以下处理程序:

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        var dg = (DataGrid)sender;
    
        // You might want to do some null checking here
    
        // If all items are selected, then unselect all
        if (dg.SelectedItems.Count == dg.Items.Count)
            dg.UnselectAll();       
        else
            dg.SelectAll();
    
        e.Handled = true;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多