WPF下递归生成树形数据绑定到TreeView上
最终效果图:(用于学习类的效果 图片丑了点,看官莫怪)

新建窗体 然后在前端适当位置插入如下代码:
<TreeView x:Name="departmentTree" Height="" Width="">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<StackPanel>
<TextBlock VerticalAlignment="Center" FontSize="" Text="{Binding deptName}" Margin="2,0,0,0"></TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
后端代码:
public class DepartmentModel
{
public List<DepartmentModel> Nodes { get; set; }
public DepartmentModel()
{
this.Nodes = new List<DepartmentModel>();
this.ParentId = ;//主节点的父id默认为0
}
public int id { get; set; }//id
public string deptName { get; set; }//部门名称
public int ParentId { get; set; }//父类id
}
public partial class TestWin : Window
{
public TestWin()
{
InitializeComponent();
this.departmentTree.ItemsSource = getTrees(, getDepts());//数据绑定
} /// <summary>
/// 获取部门列表--测试
/// </summary>
/// <returns></returns>
public List<DepartmentModel> getDepts() {
List<DepartmentModel> dplst = new List<DepartmentModel>(){
new DepartmentModel(){id=,deptName="主部门1",ParentId=},
new DepartmentModel(){id=,deptName="主部门2",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_1",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_2",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_3",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_4",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_5",ParentId=},
new DepartmentModel(){id=,deptName="主部门2_1",ParentId=},
new DepartmentModel(){id=,deptName="主部门2_2",ParentId=},
new DepartmentModel(){id=,deptName="主部门2_3",ParentId=},
new DepartmentModel(){id=,deptName="主部门2_4",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_1_1",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_1_2",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_2_1",ParentId=},
new DepartmentModel(){id=,deptName="主部门1_1_1_1",ParentId=}
};
return dplst;
} /// <summary>
/// 递归生成树形数据
/// </summary>
/// <param name="delst"></param>
/// <returns></returns>
public List<DepartmentModel> getTrees(int parentid, List<DepartmentModel> nodes)
{
List<DepartmentModel> mainNodes = nodes.Where(x => x.ParentId == parentid).ToList<DepartmentModel>();
List<DepartmentModel> otherNodes = nodes.Where(x => x.ParentId != parentid).ToList<DepartmentModel>();
foreach (DepartmentModel dpt in mainNodes)
{
dpt.Nodes = getTrees(dpt.id,otherNodes);
}
return mainNodes;
} }
上述主要代码为【递归生成树形数据】方法
本人第一次写技术博客
望各位高手不吝赐教
WPF下递归生成树形数据绑定到TreeView上的更多相关文章
- js递归生成树形下拉菜单
需求:我需要把一个单表的数据转换成类似菜单那种如图所示:我呢需要把这个菜单树放入到下框里面去如图所示: 下面是实现思路:1.第一步1.1var afTypeJson=${afTypeJson}// 这 ...
- JAVA递归生成树形菜单
递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...
- WPF新手之如何将数据绑定到TreeView
看过许多例子,全是绑定到类的,没人说如何绑定到某个对象,偏偏我这个绝对的新手就是要绑定到一个对象,只能自己摸索了: 首先要将数据绑定到容器,有以下几个默认条件:①元数据必须包装在List或者Obser ...
- 在WPF下快速生成线的方法
如果线较多时,在画布中用Path或Line生成时会比较慢.用DrawingVisual可以快速生成,这个在之前我的博客中已经提到.但在类库形式下生成的无法看到,保存成Image后再加入图层后成功显示. ...
- PHP递归生成树形数组
数据表结构 id name pid ){ foreach($data as $row){ if($row['pid']==$p_id){ $tmp = $this->tree( ...
- PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹
PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...
- Delphi中根据分类数据生成树形结构的最优方法
一. 引言: TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能 ...
- Unity 引擎UGUI之自定义树形菜单(TreeView)
先上几张效果图: 如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...
- WPF Datagrid 动态生成列 并绑定数据
原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用 可 ...
随机推荐
- mssql表名列名对应语句
if exists (select * from tempdb..sysobjects where name like '#magic%') drop table #magic go select a ...
- php 设计模式 - 单例
概述: 作为对象的创建模式,单例确保某一个内在系统中只存在一个实例,它不可以创建副本. 克隆函数(__clone )以及构造函数(__construct )必须声明为私用, 防止外部程序 创建一个新类 ...
- android px dp sp
http://www.zcool.com.cn/article/ZMTUxODQw.html
- 网络爬虫urllib2 tornado
百度不支持用tornado请求,可以用美团开放API 测试. import tornado.httpclient def fetch(url): http_header={'User-Agent':' ...
- 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?
什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就 ...
- cocos2d-x中使用可加密Sqlite存储玩家数据
手机游戏当中的数据存储是一个重要的课题.cocos2d-x发展到现在的版本2.1.4,已经直接实现了对sqlite的支持(extensions/LocalStorage),这对我们一般的数据存储已经够 ...
- Android性能优化之运算篇
下面是运算篇章的学习笔记,部分内容与前面的性能优化典范有重合,欢迎大家一起学习交流! 1)Intro to Compute and Memory Problems Android中的Java代码会需要 ...
- ASP.NET HTTP模拟提交通用类 GET POST
用法: WebRequestSugar ws = new WebRequestSugar(); //可选参数 //ws.SetAccept //ws.SetContentType //ws.SetC ...
- css中filter:alpha透明度使用
css中filter:alpha透明度使用 使用filter可以设置透明度,filter:alpha在IE下是没有问题的,要支持firefox就需要使用-moz-opacity,下面有个不错的示 ...
- C语言编译过程详解
前言 C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程. 编写hello world C程序: // hello.c #include ...