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

  • 相关阅读:
    星淘惠告诉你跨境平台那么多,凭什么要选亚马逊?
    html5期末大作业 基于HTML+CSS制作dr钻戒官网5个页面 企业网站制作
    uView 中select组件确认选择问题
    Detectron2环境配置加测试(Linux)
    跌倒检测中的跌倒判断
    2022年11月2日 matlab 中@函数的用法
    SpringMVC小记
    多年没有遇到如此流畅的面试了
    阿里云国际版Windows服务器磁盘空间不足该怎么办?
    [机缘参悟-89]:《本质思考》- 七种本质思考习惯
  • 原文地址:https://blog.csdn.net/i0703mtf/article/details/79324634