WPF下递归生成树形数据绑定到TreeView上

简介: 最终效果图:(用于学习类的效果 图片丑了点,看官莫怪) 新建窗体 然后在前端适当位置插入如下代码: ...

最终效果图:(用于学习类的效果 图片丑了点,看官莫怪)

新建窗体 然后在前端适当位置插入如下代码:

  <TreeView x:Name="departmentTree"  Height="500" Width="500">
                            <TreeView.ItemTemplate>
                                <HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
                                    <StackPanel>
                                        <TextBlock VerticalAlignment="Center" FontSize="14" 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 = 0;//主节点的父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(0, getDepts());//数据绑定
        }


        /// <summary>
        /// 获取部门列表--测试
        /// </summary>
        /// <returns></returns>
        public List<DepartmentModel> getDepts() {
            List<DepartmentModel> dplst = new List<DepartmentModel>(){
            new DepartmentModel(){id=1,deptName="主部门1",ParentId=0},
            new DepartmentModel(){id=2,deptName="主部门2",ParentId=0},
            new DepartmentModel(){id=3,deptName="主部门1_1",ParentId=1},
            new DepartmentModel(){id=4,deptName="主部门1_2",ParentId=1},
            new DepartmentModel(){id=5,deptName="主部门1_3",ParentId=1},
            new DepartmentModel(){id=6,deptName="主部门1_4",ParentId=1},
            new DepartmentModel(){id=7,deptName="主部门1_5",ParentId=1},
            new DepartmentModel(){id=8,deptName="主部门2_1",ParentId=2},
            new DepartmentModel(){id=9,deptName="主部门2_2",ParentId=2},
            new DepartmentModel(){id=10,deptName="主部门2_3",ParentId=2},
            new DepartmentModel(){id=11,deptName="主部门2_4",ParentId=2},
            new DepartmentModel(){id=12,deptName="主部门1_1_1",ParentId=3},
            new DepartmentModel(){id=13,deptName="主部门1_1_2",ParentId=3},
            new DepartmentModel(){id=14,deptName="主部门1_2_1",ParentId=4},
            new DepartmentModel(){id=15,deptName="主部门1_1_1_1",ParentId=12}
            };
            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;
        }

         
  
    }

上述主要代码为【递归生成树形数据】方法

本人第一次写技术博客 

望各位高手不吝赐教

目录
相关文章
|
8月前
|
C#
WPF疑难问题之Treeview中HierarchicalDataTemplate多级样式
WPF疑难问题之Treeview中HierarchicalDataTemplate多级样式
145 0
|
C# 数据格式 XML
WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticR...
8034 0
|
8月前
|
数据可视化 C#
WPF技术之TreeView控件
WPF TreeView控件是一个用于显示分层数据的控件,类似于文件浏览器中的目录结构。
121 0
|
前端开发 C#
WPF TreeView 启动时如何默认选择首个节点
WPF TreeView 启动时如何默认选择首个节点
如何解决WPF中 ScrollViewer 内包含 TreeView 或者 ListBox 等控件时滚轮事件被劫持的问题
如何解决WPF中 ScrollViewer 内包含 TreeView 或者 ListBox 等控件时滚轮事件被劫持的问题
WPF TreeView设置所有节点默认展开
WPF TreeView设置所有节点默认展开
|
C#
WPF QuickStart系列之数据绑定(Data Binding)
原文:WPF QuickStart系列之数据绑定(Data Binding) 这篇博客将展示WPF DataBinding的内容。 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Target需要有依赖属性。
1164 0
|
C# 存储
WPF 实现跑马灯效果的Label控件,数据绑定方式实现
原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件;具体代码如下 using System; using System.
2287 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
1950 0
|
C# 存储
【值转换器】 WPF中Image数据绑定Icon对象
原文:【值转换器】 WPF中Image数据绑定Icon对象        这是原来的代码:                这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。
872 0