WPF TreeView 绑定

2018年01月23日 13:55:32 余生余我 阅读数:563

前台:

<TreeView x:Name="tree" ItemsSource="{Binding Nodes}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type local:TreeNodeInfo}" ItemsSource="{Binding Path=Nodes}">
                    <TextBlock Background="Aqua" Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

后台:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;

namespace TreeDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        SortedDictionary<string, TreeNodeInfo> nodeList = new SortedDictionary<string, TreeNodeInfo>();

public MainWindow()
        {
            InitializeComponent();

DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("Name");
            dt.Columns.Add("ParentID");
            dt.Rows.Add("1", "研发部", "0");
            dt.Rows.Add("2", "技术部", "0");
            dt.Rows.Add("3", "销售部", "0");
            dt.Rows.Add("4", "硬件组", "1");
            dt.Rows.Add("5", "软件组", "1");
            dt.Rows.Add("6", "软件组一", "5");
            dt.Rows.Add("7", "Test", "6");
            TreeNodeInfo rootNode = new TreeNodeInfo();
            rootNode.ID = "0";
           
            nodeList.Add("0", rootNode);
            foreach (DataRow row in dt.Rows)
            {
                string id = row["ID"].ToString();
                if (!nodeList.ContainsKey(id))
                {
                    nodeList.Add(id, new TreeNodeInfo() { ID = id, Name = row["Name"].ToString(), ParentID = row["ParentID"].ToString() });
                }
            }
            foreach (var node in nodeList.Values)
            {
                TreeNodeInfo tnParent = null;
                if (!string.IsNullOrEmpty(node.ParentID))
                {
                    if (nodeList.TryGetValue(node.ParentID, out tnParent))
                    {
                        tnParent.Nodes.Add(node);
                    }
                }
            }

this.DataContext = rootNode;

}
    }

public class TreeNodeInfo : INotifyPropertyChanged 
    {
        public string ID { get; set; }
        public string name = "";
        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                RaisePropertyChanged("Name");
            }
        }
        public string ParentID { get; set; }

private ObservableCollection<TreeNodeInfo> nodes = new ObservableCollection<TreeNodeInfo>();
        public ObservableCollection<TreeNodeInfo> Nodes
        {
            get
            {
                return nodes;
            }
        }

public void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

public event PropertyChangedEventHandler PropertyChanged;
 
    }
}

特别是红颜色的字体,看不懂有没有大神解释一下,这是师傅给的Demo自己看不懂

https://www.cnblogs.com/shuang121/archive/2012/11/29/2794278.html    找到的另一种方法

转载于:https://www.cnblogs.com/LiZhongZhongY/p/10896932.html

WPF TreeView 绑定(demo 转)相关推荐

  1. 使用ViewModel模式简化WPF TreeView

    目录 介绍 TreeView的背景 ViewModel的背景 究竟是什么让TreeView如此困难? ViewModel来救援 演示解决方案 演示 1 – 带有文本搜索的家谱 PersonViewMo ...

  2. WPF TreeView HierarchicalDataTemplate

    原文 WPF TreeView HierarchicalDataTemplate   <StackPanel Margin="0,0,0,0"><StackPan ...

  3. 在WPF TreeView中使用复选框

    目录 介绍 背景 细节决定成败 功能要求 将Smarts放入ViewModel 树视图配置 将TreeViewItem变成ToggleButton Aero主题中的复选框错误 介绍 本文回顾了一个WP ...

  4. WPF Bind 绑定

    WPF Bind 绑定 原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/ ...

  5. 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。

    为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效. 行 1,位置 1(Data at the root level is invalid.). ================== ...

  6. 4递归实现阶乘计算器 5递归实现TreeView绑定表MenuTree

    4递归实现阶乘计算器 aspx: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBo ...

  7. WPF登录界面demo

    概述: 此WPF登录界面demo用了自定义按钮样式和添加了窗体阴影,并加入了旋转.缩放等动画实现的,运行效果如下: App.xaml页面代码: <Application x:Class=&quo ...

  8. C#中WPF ListView绑定数据的实例详解

    C#中WPF ListView绑定数据的实例详解 发布时间: 2019-03-09 19:29:46 来源: 互联网 作者: 晨曦888 栏目: C#教程 点击: 298 这篇文章主要介绍了C#中WP ...

  9. WPF 命令绑定的各种方式

    WPF 命令绑定的各种方式 引言 在WPF开发过程中,不得不学习的就是MVVM模式.但是在MVVM中又绕不开命令(Command)的使用.下面通过几种方式介绍我了解的WPF命令绑定方式. 如何使用 控 ...

最新文章

  1. 模型蒸馏(Distillation)
  2. python 正则表达式 断言 不定长表达式_MyEssay 之 Python正则表达式 —— 四种断言扩展的理解...
  3. dynamo python修改多个参数_python之函数
  4. 华为root工具_华为手机EMUI9 ROOT通用操作方法
  5. 拖拽之路(原生之初一):自定义QListWidget实现美观的拖拽样式
  6. 840万应届生创历史新高,企业大规模缩招,互联网行业首次出现需求负增长
  7. 饥荒正版怎么创建专用服务器,饥荒:联机版专用服务器创建设置方法汇总
  8. 每日记载内容总结46
  9. Haar特征描述算子与人脸检测
  10. 软件测试工程师调研报告,软件测试工程师竞聘报告范文.docx
  11. socket 通信之 recv函数
  12. 2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南、正南、西南方向的
  13. 功能最强大的编辑器——vi
  14. CSDN独家全网首发专栏 | 《目标检测YOLO改进指南》改进涨点推荐!
  15. 【转贴】百度贴吧成就一段姻缘!一句被五重密码保护的表白破译全记录
  16. Edge浏览器上方不展示收藏夹的内容
  17. Upload-labs 1-21关 靶场通关攻略(全网最全最完整)
  18. 图像去噪之 Noise2Noise 和 Noise2Void
  19. CFNetwork初步
  20. 娱乐性质的AI,评测性取向,有可能!~男男是真爱,男女只是为了下一代

热门文章

  1. JS里的居民们5-数组(栈)
  2. 【设计模式】适配器模式 Adapter Pattern
  3. redis 参数配置总结
  4. [iOS]CIFilter滤镜
  5. E/Trace: error opening trace file: No such file or directory
  6. Tcl8.6原生支持oop了
  7. .net 下URL重写
  8. 年青人应知道的几个故事
  9. rust模组服如何切换标准服_资讯DNF手游将于3月20日发放10000个体验服资格(附申请方法)...
  10. ElasticSearch中doc values和fielddata