定义树节点,(编译环境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 目录树绑定 与 遍历的更多相关文章

  1. WPF 4 目录树型显示

    原文:WPF 4 目录树型显示      本篇将通过WPF4 制作简单的目录树型结构显示实例,完成本篇内容我们将作出下图所示的应用程序.      从图中我们可以看到程序主要分为两部分:左边显示本地驱 ...

  2. python GUI编程tkinter示例之目录树遍历工具

    摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...

  3. 遍历目录树 - Unicode 模式

    =info     遍历目录树 支持 Unicode     Code by 523066680@163.com     2017-03         V0.5 使用Win32API判断目录硬链接 ...

  4. 利用树的先序和后序遍历打印 os 中的目录树

    [0]README 0.1)本代码均为原创,旨在将树的遍历应用一下下以加深印象而已:(回答了学习树的遍历到底有什么用的问题?)你对比下linux 中的文件树 和我的打印结果就明理了: 0.2)我们采用 ...

  5. Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图

    1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...

  6. 05.表达式目录树Expression

    参考文章 https://www.cnblogs.com/xyh9039/p/12748983.html 1. 基本了解 1.1 Lambda表达式 演变过程 using System; namesp ...

  7. C#表达式目录树(Expression)

    1.什么是表达式目录树 :简单的说是一种语法树,或者说是一种数据结构(Expression) 2.用Lambda声明表达式目录树: Expression<Func<; //表达试目录树的方 ...

  8. python实现的txt目录树

    首先,我先表述一下我的需求: 我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件.... 所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到 ...

  9. 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)

    一. 基本介绍 回忆: 最早接触到表达式目录树(Expression)可能要追溯到几年前使用EF早期的时候,发现where方法里的参数是Expression<Func<T,bool> ...

随机推荐

  1. RestTemplate的三种请求方式

    转载 https://blog.csdn.net/qq_36364521/article/details/84203133

  2. vs2017离线包下载安装并且不占用C盘空间使用教程

    安装vs2017,前提是你的环境是.NET4.6,VS2017在下载好安装程序安装的时候,会根据你选择的功能模块来下载所需要的安装程序,微软.安卓和苹果等平台的SDK.模拟器和第三方扩展功能等会在用户 ...

  3. 解决 IDEA 无法找到 java.util.Date 的问题

    原文首发于 studyidea.cn点击查看更多技巧 问题 最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date. ...

  4. Asp.Net Core 中的静态文件

    Asp.Net Core 中的静态文件 在这节中我们将讨论如何使 ASP.NET Core 应用程序,支持静态文件,如 HTML,图像,CSS 和 JavaScript 文件. 静态文件 默认情况下, ...

  5. jdk8 HashMap tableSizeFor

    今天读jdk8  HashMap源码,构造函数中 根据initialCapacity初始化threshold public HashMap(int initialCapacity, float loa ...

  6. sql2008好看的字体

  7. QT 使用QSetting读取配置文件中的中文乱码解决方案

    windows下方案: 首先需要将ini文件改成UTF-8或GB2312编码格式,可以通过notepad++工具实现.然后在配置项中填入中文,如下: 接着在程序中使用 QSettings settin ...

  8. Fundebug 微信小游戏异常监控插件更新至 0.5.0,支持监控 HTTP 慢请求

    摘要: 支持监控 HTTP 慢请求,同时修复了记录的 HTTP 响应时间偏小的 BUG. Fundebug是专业微信小游戏 BUG 监控服务,可以第一时间捕获线上环境中小游戏的异常.错误或者 BUG, ...

  9. Spring Cloud Bus介绍--Spring Cloud学习第七天(非原创)

    一.什么是Spring Cloud Bus二.Spring Cloud Bus之RabbitMQ介绍三.Spring Cloud Bus整合RabbitMQ四.Spring Cloud Bus整合Ka ...

  10. centos6.5 yum搭建安装linux+apache+mysql+php环境

    一.脚本YUM源安装: 1.yum install wget                                                     #安装下载工具wget2.wget ...