• WPF Datagrid Header数据绑定,表头复选框实现全选、全否、部分选中,根据条目动态变化


    制作一个根表头为CheckBox可全选、全不选的列表,且可根据条目自动调整CheckBox的状态(选中、不选、部分选中)。

    本来是想用DataGrid做一个CheckBox的列用于勾选其中的某些行,当时做出来之后想着添加一个全选、全否的功能。做两个按钮觉得太丑,就想着在标题栏做一个CheckBox实现此功能。开始不用会用模板,网上查了些资料可以用以下方式实现:

    1、通过DatGridTemplateColumn修改表头模板实现

    1.                 
    2. "CkB1" Click="Button_Click_2_Header" Tag="{Binding A4, Mode=TwoWay}" IsThreeState="True">
    3. "{Binding A4, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Click="Button_Click_2_Body">

    2、根据DataGridCheckBoxColumn修改表头模板实现

    1.                 <DataGridCheckBoxColumn >
    2. <DataGridCheckBoxColumn.HeaderTemplate >
    3. <DataTemplate>
    4. <CheckBox Click="CheckBox_Click_3_Header">CheckBox>
    5. DataTemplate>
    6. DataGridCheckBoxColumn.HeaderTemplate>
    7. <DataGridCheckBoxColumn.ElementStyle>
    8. <Style TargetType="CheckBox">
    9. <Setter Property="IsChecked" Value="{Binding A5}">Setter>
    10. Style>
    11. DataGridCheckBoxColumn.ElementStyle>
    12. DataGridCheckBoxColumn>

    实现显示之后可根据Click、Checked、UnCkecked事件控制全选与全否。

    但是如何实现表头状态的自动调整没啥思路,网上搜了一下资料:

    以下两种实现方式:

    1、给表头控件添加空间名称,使用时根据名称找到控件,再根据动作调整控件状态。

    如查找“CKB1“控件,通过VisualTreeHelper

            CheckBox cb = GetVisualChild<CheckBox>(this.TestDG, v => v.Name == "CkB1");
    1.         public T GetVisualChild<T>(DependencyObject parent, Func predicate) where T : Visual
    2. {
    3. int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
    4. for (int i = 0; i < numVisuals; i++)
    5. {
    6. DependencyObject v = (DependencyObject)VisualTreeHelper.GetChild(parent, i);
    7. T child = v as T;
    8. if (child == null)
    9. {
    10. child = GetVisualChild<T>(v, predicate);
    11. if (child != null)
    12. {
    13. return child;
    14. }
    15. }
    16. else
    17. {
    18. if (predicate(child))
    19. {
    20. return child;
    21. }
    22. }
    23. }
    24. return null;
    25. }

  • 相关阅读:
    心律守护 基于机器学习的心脏病预测
    最优的纯文本模型?GPT-4蓄势待发
    06_SpingBoot 下的 Spring MVC
    Arduino esp8266 SerialEvent函数使用注意事项
    K线形态识别_双飞乌鸦
    react源码中的hooks
    Nuxt - [高效简洁] 路由不存在时,跳转到自己定制的 404.vue 页面(当路由不存在时自动重定向到自定义的 404 组件)路由配置的解决方案
    vsftpd配置
    范畴论(Category Theory)的基本介绍
    Vue3 -- computed 生命周期钩子 Provide函数 侦听数据的变化 watch script setup语法
  • 原文地址:https://blog.csdn.net/i0703mtf/article/details/79324634