treeview形式的checkbox(wpf、c#)

WinCC笔记:01.TreeView控件 —— (3)给节点添加checkbox & checkbox的单选性 一、添加checkbox写脚本二、统计选中的节点1. 插入一个多行文本,对象名称改为Multext2. 插入一个按钮,写脚本。 阅读详情

如何实现treeview形式的checkbox,并且父节点和子节点的选中状态可相互影响。示例图:
在这里插入图片描述

代码如下:

wpf代码:treeview绑定的数据是PermissionDataCollection。

<TreeView ItemsSource="{Binding PermissionDataCollection}">
	<TreeView.ItemTemplate>
		<HierarchicalDataTemplate ItemsSource="{Binding Children}">
			<StackPanel Orientation="Horizontal" >
				<CheckBox IsChecked="{Binding IsChecked}"/>
				<TextBlock Text="{Binding Name}"/>
			 </StackPanel>
		</HierarchicalDataTemplate>
	</TreeView.ItemTemplate>
</TreeView>

后端数据来源:PermissionDataCollection的声明及定义:

public ObservableCollection<TreeViewItemModel> PermissionDataCollection { get; set; }
PermissionDataCollection = new ObservableCollection<TreeViewItemModel>();

// 添加根节点
var rootNode = new TreeViewItemModel { Name = "所有权限", IsChecked = false, Children = new ObservableCollection<TreeViewItemModel>() };
PermissionDataCollection0.Add(rootNode);

// 添加子节点
var childNode1 = new TreeViewItemModel { Name = "系统设置", IsChecked = false, Children = new ObservableCollection<TreeViewItemModel>(), Parent = rootNode };
var childNode2 = new TreeViewItemModel { Name = "日志管理", IsChecked = true, Children = new ObservableCollection<TreeViewItemModel>(), Parent = rootNode };
rootNode.Children.Add(childNode1);
rootNode.Children.Add(childNode2);

// 添加孙子节点
var grandChildNode1 = new TreeViewItemModel { Name = "相机设置", IsChecked = true, Children = new ObservableCollection<TreeViewItemModel>(), Parent = childNode1 };
var grandChildNode2 = new TreeViewItemModel { Name = "参数设置", IsChecked = false, Children = new ObservableCollection<TreeViewItemModel>(), Parent = childNode1};
childNode1.Children.Add(grandChildNode1);
childNode1.Children.Add(grandChildNode2);

TreeViewItemModel的定义:(也就是定义treeview形式的checkbox)

public class TreeViewItemModel : INotifyPropertyChanged
{
  private bool _isChecked;
  private bool _isUpdatingChildren;

  public string Name { get; set; }

  public bool IsChecked
  {
      get { return _isChecked; }
      set
      {
          if (_isChecked != value)
          {
              _isChecked = value;
              OnPropertyChanged(nameof(IsChecked));

              if (!_isUpdatingChildren && Children != null)
              {
                  _isUpdatingChildren = true;

                  // 递归设置子节点的勾选状态
                  foreach (var child in Children)
                  {
                      child.IsChecked = value;
                  }

                  _isUpdatingChildren = false;
              }

              // 更新父节点的勾选状态
              if (Parent != null)
              {
                  UpdateParentCheckedState();
              }
          }
      }
  }

  public ObservableCollection<TreeViewItemModel> Children { get; set; }

  public TreeViewItemModel Parent { get; set; }

  public event PropertyChangedEventHandler PropertyChanged;

  protected virtual void OnPropertyChanged(string propertyName)
  {
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }

  public void UpdateParentCheckedState()
  {
      if (Parent != null)
      {
          bool allSiblingsChecked = Parent.Children.All(child => child.IsChecked);
          bool anySiblingChecked = Parent.Children.Any(child => child.IsChecked);

          if (allSiblingsChecked)
          {
              Parent._isChecked = true;
          }
          else if (anySiblingChecked)
          {
              Parent._isChecked = false;
          }
          else
          {
              Parent._isChecked = false;
          }

          Parent.OnPropertyChanged(nameof(IsChecked));
          Parent.UpdateParentCheckedState();
      }
  }
}
WPF带CheckBox的TreeView控件的实现 WPF带CheckBox的TreeView控件的实现 View: &amp;amp;amp;amp;amp;amp;amp;amp;lt;TreeView ItemsSource=&amp;amp;amp;amp;amp;amp;amp;quot;{Binding Items}&amp;amp;amp;amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;amp;amp;gt; &amp;a 阅读详情

相关推荐

WPF实现TreeView与数据库的动态绑定及交互

TreeView控件在用户界面(UI)设计中扮演着信息层级展示的重要角色。它允许用户以树状结构浏览和管理数据,非常适合用于需要展示多层次信息的应用程序中。这种控件的视觉效果帮助用户快速理解信息的层次关系,同时也提供了便捷的方式来导航和访问信息。在定义时,需要指定DataType属性来指定这个模板将被应用到哪个类型的数据对象上。ItemsPanel属性用于定义子项的布局方式,通常是,并指定使用以支持虚拟化,这对于层次化数据尤其重要。

weixin_42576804的博客 1499

WPF的TreeView与CheckBox结合,父节点和子节点相互影响

这个例子折腾了我好几天,今天终于搞定了,由于太晚了,就不说过程,只看结果和代码。1、遍历文件夹:在这个例子中,CheckBox显示三种状态,另外父节点选中,子节点全选,父节点不选,子节点全不选;子节点部分选,父节点null状态;子节点全选,父节点选中状态;子节点全不选,父节点不选状态。这个例子适合遍历。接下来看代码(这个代码的例子忘记了是哪个大神写的,下次找到后附链接加感谢):class Dire...

niuge8905的博客 3643

WPF自定义虚线树形控件实现详解

在现代WPF开发中,自定义控件是实现高度可复用、可扩展UI组件的核心技术。WPF通过逻辑树与可视树的分离机制,实现了界面结构与视觉表现的解耦,使得控件模板(ControlTemplate)可以完全重写而不影响其行为逻辑。依赖属性系统(DependencyProperty)和路由事件(RoutedEvent)构成了控件通信的基础,支持属性值继承、数据绑定及事件冒泡/隧道机制。该代码注册了一个可绑定、支持双向更新的依赖属性,体现了WPF控件状态管理的核心模式。

weixin_35578748的博客 964

WPF:树状图分组三种状态,TreeView与CheckBox

TreeView与CheckBox父节点和子节点效果图需求说明代码.xaml前台.xaml.cs后台CheckTreeView.cs类 效果图 需求说明 这是一个树状图,要求三种状态:全部选中,对号勾选;全部未选中,勾选框空白;部分选中,部分未选中,勾选框涂黑。 这是加载状态就该显示的,同时,你点击父节点选中,子节点该分组便所有都被选中;父节点为被选中,子节点就为空白。 同理,子节点也是,全部选中子节点,父节点就被勾选;都不选中子节点,父节点就空白;部分选中子节点,父节点就为填黑状态。 数据是从Mysql

YiDabing9的博客 3582

WPF 子选项为CheckBox的TreeView实例

在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提供强大的ItemTemplate模板功能和自定义样式,那我们可以自己写一个这样的控件供自己使用。

wpf实现的checkbox层级联动树形菜单

实现右键(展开所有、关闭所有、选择所有、反选所有) 实现选中上级时自动选择下级所有

关于Winform下,获取Treeview中CheckBox选中项的技巧

背景 今天,在做一个指纹管理平台的界面上,遇到了一些问题,因为公司的基础库中没有针对Winform平台的操作,所以在一个部门选择的场景中,关于如何获取部门TreeView中被选中的项目被难住了。所幸还有一个神器叫做搜索引擎,故谷歌一番,发现Asp.net下的这个问题很好解决,但是关于Winform平台下的类似问题,如凤毛麟角啊! 当然,今天我也是查了很久,终于发现了两篇不错的文章,帮助我解决了...

weixin_30636089的博客 425

泛微Ecology9单点登录实战指南:从Token获取到页面跳转

本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。

ol789012345的博客 1064

【亲测免费】 WPF带CheckBox的TreeView:高效多选树形视图组件

WPF带CheckBox的TreeView:高效多选树形视图组件 【下载地址】WPF带CheckBox的TreeView 本资源是针对WPF平台开发的一个实用组件,实现了在TreeView控件中集成CheckBox功能。这个实现源于一位匿名开发者分享的C#代码灵感,经过改编和优化,专为满足特定需求而设计——即在WPF应用...

gitblog_09792的博客 1440

HFSS实战:手把手教你设计3.3-10.6GHz超宽带微带天线(附S11优化技巧)

本文提供了一份基于Ansys HFSS的超宽带微带天线实战设计指南,详细讲解了从3.3GHz到10.6GHz天线的建模、仿真与优化全流程。文章重点剖析了阻抗匹配的核心挑战,并分享了通过接地板开槽、参数化扫描及目标驱动优化等系统性技巧来优化S11曲线的实用方法,帮助射频工程师快速掌握超宽带天线设计的关键技能。

2y3u4i5o6p的博客 1080

数字IC后端实战:如何用ICC搞定复杂模块的floorplan与powerplan(附避坑指南)

本文深入解析数字IC后端设计中复杂模块的floorplan与powerplan实战技巧,重点介绍多边形模块边界处理、MTCMOS电源网络优化及存储器摆放陷阱规避。通过Synopsys ICC工具的具体操作示例和项目实战经验,帮助工程师高效解决设计难题,提升芯片性能与可靠性。

weixin_29213525的博客 349

在WPF TreeView中使用复选框

输入焦点,因为它会对键盘导航产生负面影响,但是,当它的包含项被选中时,它必须以某种方式切换其检查状态以响应某些击键。如果您对项目应如何以及何时更新其检查状态有不同的规则,只需调整这些方法中的逻辑以满足您的需求。我建议您复制这些要求并将它们粘贴到您最喜欢的文本编辑器中,例如记事本,因为我们将在文章的其余部分按编号引用它们。对象的检查状态发生变化时,它会将简单的规则应用于其父项和子项的检查状态。本文还展示了如何使用。在本文中,我们将检查我的。的项是复选框,这是很常见的,比如在向用户展示一组要选择的分层选项时。

weixin_53370274的博客 1574

视觉语言模型对抗攻击与防御:从传统方法到多模态挑战

本文深入探讨了视觉语言模型(VLM)面临的对抗攻击与防御挑战,从传统单模态攻击到多模态威胁的演进。分析了包括FGSM、PGD等经典攻击方法,以及新兴的多模态攻击如跨模态对抗样本和越狱攻击。同时提出了跨模态一致性检查、动态防御机制等创新防御策略,并结合医疗影像诊断等实战案例,为提升AI系统安全性提供了重要见解。

weixin_29231725的博客 392

WPF实现树形下拉列表框(TreeComboBox)

树形下拉菜单是许多WPF应用程序中常见的用户界面元素,它能够以分层的方式展示数据,提供更好的用户体验。本文将深入探讨如何基于WPF创建一个可定制的树形下拉菜单控件,涵盖从原理到实际实现的关键步骤。

u013319633的博客 3170

C#每日面试题-属性和字段的区别

在C#面试中,“属性(Property)和字段(Field)的区别”是基础且高频的考点。很多初学者会把两者混为一谈,甚至觉得“属性就是加了get/set的字段”,但这种理解只停留在表面。面试考察的核心,是对“封装思想”的理解,以及两者在语法特性、底层实现、实际应用中的本质差异。今天我们从“基础认知→核心差异→底层原理→实际应用→面试避坑”五个层面,把这个知识点讲透,既保证新手能看懂,又能满足面试的深度要求。

Amon的专栏 778

将GroundDINO、EdgeMTAM和FoundationPose的ONNX模型转换为TensorRT格式并部署到NVIDIA Jetson Orin平台的完整技术指南

TensorRT模型部署指南:从ONNX到Jetson Orin的优化实践 本文详细介绍了将GroundDINO、EdgeMTAM和FoundationPose模型从ONNX格式转换为TensorRT引擎并在Jetson Orin平台部署的全流程。主要内容包括: 环境配置:JetPack 5.1.2+环境搭建,TensorRT工具链安装,存储与交换空间优化 模型转换:动态尺寸处理、自定义算子实现、层融合策略及INT8量化校准 部署优化:引擎序列化加密、多模型并行推理架构设计、CUDA流异步执行 实战技巧。

huanghm88的专栏 437

WPF效果第二百一十一篇之TreeView勾选

前面已经实现了WPF效果第二百零二篇之TreeView带连接线,给专家展示,结果人家有点不满意;然后提了个要求:能不能每个节点都能让我随心所欲的勾选;咱好像啥也不能说,只能尽量满足就行了;二话不多说直接看效果:1、前台关于ItemTemplate如下:<HierarchicalDataTemplate x:Key="LedDataTemplate" DataType="{x:Type Mod...

dotNET跨平台 571

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

WPF随笔(二)--带CheckBox的TreeView

在上一篇的文章中记录了如何使用MahApps.Metro界面库,本人还是比较喜欢它简约现代的风格,但是却发现MahApps.Metro中没有带CheckBox的TreeView,于是就参考资料做了一个带复选框的树形图。 树形图TreeView的特点是可以不断循环嵌套下去,如果只有固定的两级或三级并没有太大意义,因此其对应的数据结构应该也是要可循环嵌套的。同时一个通用的树形图的每个节点应该能够支持...

lordwish的专栏 3433

手把手教你学simulink(57.3)--电励磁同步电动机场景示例:基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论需求分析电励磁同步电动机(Electr

MHD0815的博客 503

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

wpf带checkbox的treeview开发

好久没有写博文了,其实也发现没什么可写的,最近又搞起WPF来,其中用到了treeview,有点东西拿来分享一下。   treeview默认是不带checkbox的,但让他带checkbox也很简单,设置一下样式即可,当然这不是难点,也不是重点,重点是checked属性怎么关联数据的问题,笔者也是查阅网上诸多大神的示例,其中就使用了绑带数据源的方式,实现动态改变checked状态,笔者也是在此基础

江下飞雪 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WPF中,Combobox下拉框为Treeview(两层,可多选)

【代码】WPF中,Combobox下拉框为Treeview(两层,可多选)

qq_40572871的博客 2024

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C#(在TreeView中使用CheckBox)

树结构中的节点共有两层(父节点是分类名称子节点是属于该类的项的名称)都是从数据库中读出而且是在读出的过程中将具体的数据项名称进行分类的。要想实现:treeview的AfterCheck事件中的:    1.父节点勾选则子节点全部勾选    2.父节点不勾选则子节点全部不勾选    3.子节点全部不勾选则父节点不够选而且父节点的文本呈黑色    4.子节点部分勾选则父节点不勾选而且文本呈灰色   

刘筱筑的专栏 3907

WPF的Treeview控件实现CheckBox

WPF的Treeview控件的一般用法书上都有介绍,就没必要多讲。这里主要说明TreeView里实现CheckBox。 首先构造一个Node类 public class Node : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; ...

niuge8905的博客 2384

TreeView中CheckBox的使用

要求如下: 1、判断同级节点是否全部选中,从第一个节点开始 2、判断同级节点是否全未选中,从第一个节点开始 3、如果该节点选中,则其子节点全部选中,反之亦然 4、如过该节点选中,则其父节点依次选中 5、如果该节点没有选中,且同级节点全未选中,则取消父节点 #region 判断同级节点是否全部选中,从第一个节点开始 private bool IsAllCh

梦之颠——应用与二次开发专栏 1974

WPF控件之TreeView扩展应用(二)

treeview

weixin_45650894的博客 1828
上一篇: WPF C# Binding绑定不上的解决情况
下一篇: c# ? .和 ??
robot_???
博客等级 码龄8年 38粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值