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使用 可 ...
随机推荐
- using-ef-code-first-with-an-existing-database
http://weblogs.asp.net/scottgu/using-ef-code-first-with-an-existing-database http://weblogs.asp.net/ ...
- Windows Service插件服务开源
WindowsService 插件服务是一个为简化NTService开发和打包程序,提供插件开发的方式进行动态加入或删除业务. 插件式服务程序的由来,在系统维护的过程中,根据企业的要求经常要进行一些周 ...
- C# 5.0 新特性——Async和Await使异步编程更简单
http://www.cnblogs.com/zhili/archive/2013/05/15/csharp5asyncandawait.html http://blog.zhaojie.me/201 ...
- 斐波那契堆(三)之 Java的实现
概要 前面分别通过C和C++实现了斐波那契堆,本章给出斐波那契堆的Java版本.还是那句老话,三种实现的原理一样,择其一了解即可. 目录1. 斐波那契堆的介绍2. 斐波那契堆的基本操作3. 斐波那契堆 ...
- Click Models for Web Search(2) - Parameter Estimation
在Click Model中进行参数预估的方法有两种:最大似然(MLE)和期望最大(EM).至于每个click model使用哪种参数预估的方法取决于此model中的随机变量的特性.如果model中的随 ...
- [git]通过commit_id找回文件
git checkout commit_id 这样会切换到这个commit_id的上,文件的内容就是这个commit保存的内容. git checkout -b new_branch_name com ...
- Direct3D11学习:(二)基本绘图概念和基本类型
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在正式开始学习D3D11之前,我们必需首先学习必要的基础知识. 在这篇文章中,我们将介绍一下Direct3D ...
- 15个私有云上的DevOps 开源工具
本文由来:之前工作需要,在查找运维自动化资料时,发现了这篇文章的英文原版,觉得很不错.它综合的介绍了哪些工具,我们运维人员需要掌握,并且如何进行结合其它工具一起使用.给了一些指导性的意见.由于是英文的 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...
- CentOS6.5菜鸟之旅:VirtualBox4.3识别USB设备
一.前言 VirtualBox默认是不能识别USB设备的,但可以通过Oracle VM VirtualBox Extension Pack来增强VirtualBox的功能,增强的功能如下: 1. US ...