WPF TreeView 绑定(demo 转)
WPF TreeView 绑定
前台:
<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 转)相关推荐
- 使用ViewModel模式简化WPF TreeView
目录 介绍 TreeView的背景 ViewModel的背景 究竟是什么让TreeView如此困难? ViewModel来救援 演示解决方案 演示 1 – 带有文本搜索的家谱 PersonViewMo ...
- WPF TreeView HierarchicalDataTemplate
原文 WPF TreeView HierarchicalDataTemplate <StackPanel Margin="0,0,0,0"><StackPan ...
- 在WPF TreeView中使用复选框
目录 介绍 背景 细节决定成败 功能要求 将Smarts放入ViewModel 树视图配置 将TreeViewItem变成ToggleButton Aero主题中的复选框错误 介绍 本文回顾了一个WP ...
- WPF Bind 绑定
WPF Bind 绑定 原文:WPF Bind 绑定 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/ ...
- 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。
为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效. 行 1,位置 1(Data at the root level is invalid.). ================== ...
- 4递归实现阶乘计算器 5递归实现TreeView绑定表MenuTree
4递归实现阶乘计算器 aspx: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBo ...
- WPF登录界面demo
概述: 此WPF登录界面demo用了自定义按钮样式和添加了窗体阴影,并加入了旋转.缩放等动画实现的,运行效果如下: App.xaml页面代码: <Application x:Class=&quo ...
- C#中WPF ListView绑定数据的实例详解
C#中WPF ListView绑定数据的实例详解 发布时间: 2019-03-09 19:29:46 来源: 互联网 作者: 晨曦888 栏目: C#教程 点击: 298 这篇文章主要介绍了C#中WP ...
- WPF 命令绑定的各种方式
WPF 命令绑定的各种方式 引言 在WPF开发过程中,不得不学习的就是MVVM模式.但是在MVVM中又绕不开命令(Command)的使用.下面通过几种方式介绍我了解的WPF命令绑定方式. 如何使用 控 ...
最新文章
- 模型蒸馏(Distillation)
- python 正则表达式 断言 不定长表达式_MyEssay 之 Python正则表达式 —— 四种断言扩展的理解...
- dynamo python修改多个参数_python之函数
- 华为root工具_华为手机EMUI9 ROOT通用操作方法
- 拖拽之路(原生之初一):自定义QListWidget实现美观的拖拽样式
- 840万应届生创历史新高,企业大规模缩招,互联网行业首次出现需求负增长
- 饥荒正版怎么创建专用服务器,饥荒:联机版专用服务器创建设置方法汇总
- 每日记载内容总结46
- Haar特征描述算子与人脸检测
- 软件测试工程师调研报告,软件测试工程师竞聘报告范文.docx
- socket 通信之 recv函数
- 2022-06-10:薯队长从北向南穿过一片红薯地(南北长M,东西宽N),红薯地被划分为1x1的方格, 他可以从北边的任何一个格子出发,到达南边的任何一个格子, 但每一步只能走到东南、正南、西南方向的
- 功能最强大的编辑器——vi
- CSDN独家全网首发专栏 | 《目标检测YOLO改进指南》改进涨点推荐!
- 【转贴】百度贴吧成就一段姻缘!一句被五重密码保护的表白破译全记录
- Edge浏览器上方不展示收藏夹的内容
- Upload-labs 1-21关 靶场通关攻略(全网最全最完整)
- 图像去噪之 Noise2Noise 和 Noise2Void
- CFNetwork初步
- 娱乐性质的AI,评测性取向,有可能!~男男是真爱,男女只是为了下一代
热门文章
- JS里的居民们5-数组(栈)
- 【设计模式】适配器模式 Adapter Pattern
- redis 参数配置总结
- [iOS]CIFilter滤镜
- E/Trace: error opening trace file: No such file or directory
- Tcl8.6原生支持oop了
- .net 下URL重写
- 年青人应知道的几个故事
- rust模组服如何切换标准服_资讯DNF手游将于3月20日发放10000个体验服资格(附申请方法)...
- ElasticSearch中doc values和fielddata