• 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. }

  • 相关阅读:
    阿里云服务器部署Web环境
    2023 百度之星(夏日漫步 + 跑步问题)
    built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
    《前端运维》五、k8s--1安装与基本配置
    Reactor模型
    【FOC】FOC控制流程图
    汽车tbox车联网系统终端
    JavaScript知识点补充
    马斯克回应盖茨;谷歌反垄断案开庭;苹果发布 3nm 芯片的 iPhone 15丨RTE开发者日报 Vol.48
    Wi-Fi直连分享:Android设备间的高速连接
  • 原文地址:https://blog.csdn.net/i0703mtf/article/details/79324634