WPF 目录树绑定 与 遍历
定义树节点,(编译环境VS2017)
public class GBTreeNode : INotifyPropertyChanged
{
private string _deviceId = string.Empty;
private string _name = string.Empty;
private string _parentId = string.Empty;
private ImageSource _imageSource = null;
private ObservableCollection<GBTreeNode> _Nodes = new ObservableCollection<GBTreeNode>();
public string DeviceId
{
set => UpdateProperty(ref _deviceId, value);
get => _deviceId;
}
public string Name
{
set => UpdateProperty(ref _name, value);
get => _name;
}
public string ParentId
{
set => UpdateProperty(ref _parentId, value);
get => _parentId;
}
public ImageSource ImageSource
{
set => UpdateProperty(ref _imageSource, value);
get => _imageSource;
}
public ObservableCollection<GBTreeNode> Nodes
{
set => UpdateProperty(ref _Nodes, value);
get => _Nodes;
}
public void UpdateProperty<T>(ref T properValue, T newValue, [CallerMemberName] string propertyName = "")
{
if (object.Equals(properValue, newValue))
{
return;
}
properValue = newValue; OnPropertyChanged(propertyName);
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
xmal 前端代码: localCatalog 绑定的树结构
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="TreeViewTemplate" DataType="{x:Type mode:GBTreeNode}" ItemsSource="{Binding Nodes, Mode=TwoWay}">
<StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<Image Source="{Binding ImageSource , Mode=TwoWay}" Width="16" Height="16" />
<Label Width="5" Opacity="0"></Label>
<TextBlock Text="{Binding Name, Mode=TwoWay}" ToolTip="{Binding Name, Mode=TwoWay}" FontSize="12"/>
</StackPanel>
</HierarchicalDataTemplate>
</UserControl.Resources>
<TreeView Background="#DBDDE1" ItemTemplate="{StaticResource ResourceKey=TreeViewTemplate}" BorderThickness="1"
BorderBrush="Red" ItemsSource="{Binding Path=localCatalog}" Margin="10,0,0,0" />
Tips: 编译的时候 DataType="{x:Type mode:GBTreeNode}" 此段代码会出错, 需要在xmal头添加GBTreeNode所在命名空间
xmlns:mode="clr-namespace:XXXXXXXXXXX"
CS中的后台代码: 生成目录树结构
public ObservableCollection<GBTreeNode> localCatalog = new ObservableCollection<GBTreeNode>();
localCatalog = Bind(所有的树节点);
//绑定树
private ObservableCollection<GBTreeNode> Bind(ObservableCollection<GBTreeNode> nodes)
{
ObservableCollection<GBTreeNode> outputList = new ObservableCollection<GBTreeNode>();
for (int i = 0; i < nodes.Count; i++)
{
if (FindDownward(nodes, nodes[i].ParentId) != null)
{
FindDownward(nodes, nodes[i].ParentId).Nodes.Add(nodes[i]);
}
else //找不到父节点,此节点就为根节点
{
outputList.Add(nodes[i]);
}
}
return outputList;
}
//向下查找
private GBTreeNode FindDownward(ObservableCollection<GBTreeNode> nodes, string ParentId)
{
if (nodes.Count == 0) return null;
for (int i = 0; i < nodes.Count; i++)
{
if (nodes[i].DeviceId.Equals(ParentId))
{
return nodes[i];
}
GBTreeNode node = FindDownward(nodes[i].Nodes, ParentId);
if (node != null)
{
return node;
}
}
return null;
}
CS后台代码: 遍历目录树结构
//nodes: 创建好的树结构 list: 保存树所有的树节点
private void RecurPackageTreeNodeXml(ObservableCollection<GBTreeNode> nodes, List<CatalogConfigItemType> list)
{
if (nodes.Count == 0) return;
foreach (GBTreeNode item in nodes)
{
/*
业务代码
*/
RecurPackageTreeNodeXml(item.Nodes, list);
list.Add(itemNode);
}
}
WPF 目录树绑定 与 遍历的更多相关文章
- WPF 4 目录树型显示
原文:WPF 4 目录树型显示 本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序. 从图中我们可以看到程序主要分为两部分:左边显示本地驱 ...
- python GUI编程tkinter示例之目录树遍历工具
摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...
- 遍历目录树 - Unicode 模式
=info 遍历目录树 支持 Unicode Code by 523066680@163.com 2017-03 V0.5 使用Win32API判断目录硬链接 ...
- 利用树的先序和后序遍历打印 os 中的目录树
[0]README 0.1)本代码均为原创,旨在将树的遍历应用一下下以加深印象而已:(回答了学习树的遍历到底有什么用的问题?)你对比下linux 中的文件树 和我的打印结果就明理了: 0.2)我们采用 ...
- Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图
1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...
- 05.表达式目录树Expression
参考文章 https://www.cnblogs.com/xyh9039/p/12748983.html 1. 基本了解 1.1 Lambda表达式 演变过程 using System; namesp ...
- C#表达式目录树(Expression)
1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: Expression<Func<; //表达试目录树的方 ...
- python实现的txt目录树
首先,我先表述一下我的需求: 我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件.... 所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到 ...
- 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)
一. 基本介绍 回忆: 最早接触到表达式目录树(Expression)可能要追溯到几年前使用EF早期的时候,发现where方法里的参数是Expression<Func<T,bool> ...
随机推荐
- Spring Security 实战干货:使用 JWT 认证访问接口
(转载)原文链接:https://my.oschina.net/10000000000/blog/3127268 1. 前言 欢迎阅读Spring Security 实战干货系列.之前我讲解了如何编写 ...
- layui 数据表格里面的html代码转义
table.render({ elem: '#release_table' ,url:'data_list' ,where: {table: 'release'} //两步转义转义,先将原始数据 ...
- Solr集群(即SolrCloud)搭建与使用
1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不 ...
- C 储存类与运算符
储存类 参考链接:https://www.runoob.com/cprogramming/c-storage-classes.html 存储类定义 C 程序中变量/函数的范围(可见性)和生命周期 au ...
- 350道面试题分享,拿下京东offer工资double
350道面试题分享,拿下京东offer工资double 前言: 面试,其实是一个双向选择的过程,在这个过程里,我们不应该抱着畏惧的心态去对待,这样反而会影响自己的发挥.同时看中的应该不止薪资,还要看你 ...
- LeetCode: 404.左叶子节点
计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父 ...
- 去除数组空格 php
public function trimArray($params){ if (!is_array($params)) return trim($params); return array_map([ ...
- MongoDB 4.X 用户和角色权限管理总结
关于MongoDB的用户和角色权限的梳理一直不太清晰,仔细阅读了下官方文档,并对此做个总结. 默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随 ...
- 吴丽丽-201871010123 《面向对象程序设计(java)》第六、七周学习总结
吴丽丽-201871010123 <面向对象程序设计(java)>第六.七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...
- 201871010112-梁丽珍《面向对象程序设计(java)》第十周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...