当前位置: 首页 > news >正文

如何获取集合控件中子项元素的容器

问题背景

这个问题是在最近写WPF程序的时候遇到的。具体来说,假如我在前端定义了一个TreeView,并将其命名为MyTreeView。我该如何通过这个MyTreeView得到其某个元素的容器(对于TreeView来说就是TreeViewItem)。不同于Winform程序,我们可以直接通过MyTreeView.Nodes这种方式得到一个TreeNodeCollection。在WPF中,由于数据与容器分离的思想,我们好像无法通过一个属性得到所有的TreeViewItem集合。

如何获取到集合数据

在WPF中,我们可以通过两种方式去获取到其对应的集合数据。分别是ItemsItemsSource(对于两种方法的区别可以去查一下文档或者问一下AI,这两种方法不是完全相等的)。

集合数据项到容器的转换

上面已经介绍了,如何获取到集合控件所对应的集合数据项,如何通过这个集合数据项映射为一个对应的容器,可以通过下面的方法。

点击查看代码
private void GetTreeNodesStatus(ItemsControl control)
{TreeView treeView = new Tree// TreeView不为空if (control != null){// 遍历所有节点,Items中对应的是绑定的数据源中的每一项foreach (object item in control.Items){// 根据数据源中的每一项 得到其在TreeView中对应的每一个TreeViewItemsTreeViewItem treeItem = control.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;// 如果treeItem不为空且有子项if (treeItem != null && treeItem.HasItems){// 获取插件NodeModuleNode moduleNode = treeItem.DataContext as ModuleNode;// 则需要展开m_NodesStatusDic[moduleNode.Name] = treeItem.IsExpanded;// 递归,如果子项还有子项递归设置为展开状态GetTreeNodesStatus(treeItem as ItemsControl);}}}}
上面的方法中,我们递归的去每一个树结点中的子项,并记录其状态,其中

control.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;就实现了从数据项映射为对应控件容器的操作。该方法会从对应的容器中通过模式匹配的方式,找到对应当前数据项的容器并返回。

http://www.wuyegushi.com/news/498.html

相关文章:

  • 火山引擎-大模型应用防火墙
  • chorme如何设置在新标签页打开页面?
  • Gentoo解决clocksource未使用tsc问题
  • UIUCTF 2024 syscalls
  • POLIR-Laws-民法典: 第三编 合同 : 第二分编 典型合同: 17.承揽
  • 2025-07-27 模拟赛总结
  • widedeep在adult数据集上的应用
  • POLIR-Laws-民法典: 第三编 合同 : 第二分编 典型合同
  • 协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务
  • 2025年7月27日
  • 连续动作强化学习中的反事实探索:揭示AI决策背后的可能性
  • ADC模数转换器
  • 启明星辰-大模型应用防火墙
  • VulnHub 靶场--broken(十六进制转图片)
  • TIM输入捕获
  • 文件权限标记机制在知识安全共享中的应用实践
  • PID
  • POLIR-Laws-民法典: 民法典 包括 并 废止 《合同法》
  • 18
  • 字节-大模型联邦精调方案
  • 分块
  • 并查集
  • 7-27
  • CVE-2021-21311 服务器端请求伪造(SSRF)漏洞 (复现)
  • 【Rag实用分享】小白也能看懂的文档解析和分割教程
  • 【纯干货】三张图深入分析京东开源Genie的8大亮点
  • JoyAgent综合测评报告
  • 【EF Core】为 DatabaseFacade 扩展“创建”与“删除”数据表功能
  • 亚马逊机器学习大学推出负责任AI课程 - 聚焦AI偏见缓解与公平性实践
  • FFmpeg开发笔记(七十八)采用Kotlin+Compose的NextPlayer播放器