我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c# WPF中的TreeView使用详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c# WPF中的TreeView使用详解

在wpf中实现treeview的功能,可能看到很多分享的都是简单的绑定,仅此记录自己完成的功能。

前台


<TreeView x:Name="chapterTree" Grid.Column="0" SelectedItemChanged="chapterTree_SelectedItemChanged" PreviewMouseRightButtonDown="chapterTree_PreviewMouseRightButtonDown" FontSize="14" ItemsSource="{Binding Path=Nodes}" >
      
      <TreeView.ContextMenu>
       <ContextMenu>
        <MenuItem Header="保存" Name="btnAlterData" Click="btnAlterData_Click" />
        <MenuItem Header="新增兄弟节点" Name="btnSaveData" Click="btnSaveData_Click"/>
        <MenuItem Header="新增子节点" Name="btnSaveSonData" Click="btnSaveSonData_Click"/>
        <MenuItem Header="删除" Name="btnDdeleteData" Click="btnDdeleteData_Click"/>
        <MenuItem Header="上移一位" Name="btnUp" Click="btnUp_Click"/>
        <MenuItem Header="下移一位" Name="btnDown" Click="btnDown_Click"/>
       </ContextMenu>
      </TreeView.ContextMenu>
      <TreeView.ItemTemplate>
       <HierarchicalDataTemplate DataType="{x:Type c:OrderModel}" ItemsSource="{Binding Path=ChildNodes}">
        <Label Content="{Binding Path=OrderName}"/>
       </HierarchicalDataTemplate>
      </TreeView.ItemTemplate>
     </TreeView>

后台


CommandModel cm;

  public Command()
  {
   InitializeComponent();
   cm = new CommandModel();
   chapterTree.ItemsSource = cm.Nodes;

  }

新建了CommandModel页面用来绑定数据(从数据库提取的数据,转换成了list)


public event PropertyChangedEventHandler PropertyChanged;
  private ObservableCollection<OrderModel> nodes = new ObservableCollection<OrderModel>();
  public ObservableCollection<OrderModel> Nodes
  {
   get { return nodes; }
   set
   {
    nodes = value;
    if (PropertyChanged != null)
     PropertyChanged(this, new PropertyChangedEventArgs("Nodes"));
   }
  }
  
  public CommandModel()
  {
   Initiate();
  }
  private void Initiate()
  {
   using (SQLiteConnection con = new SQLiteConnection(MainWindow.sb.ToString()))
   {
    DataTable table = new DataTable("MyTable");
    var reader = con.ExecuteReader("SELECT * FROM OrderData Order by OrderID");
    table.Load(reader);
    ObservableCollection<OrderModel> _nodes = new ObservableCollection<OrderModel>();
    _nodes = ConvertToList(table);

    //ShowTreeView();
    Nodes = getChildNodes(0, _nodes);

   }
  }

  private ObservableCollection<OrderModel> getChildNodes(long parentID, ObservableCollection<OrderModel> nodes)
  {
   List<OrderModel> a = new List<OrderModel>(nodes.Where(x => x.ParentID == parentID).ToList());
   ObservableCollection<OrderModel> mainNodes =new ObservableCollection<OrderModel>(a);
   List<OrderModel> b = new List<OrderModel>(nodes.Where(x => x.ParentID != parentID).ToList());
   ObservableCollection<OrderModel> otherNodes =new ObservableCollection<OrderModel>(b);
   foreach (OrderModel node in mainNodes)
    node.ChildNodes = getChildNodes(node.ID, otherNodes);
   return mainNodes;
  }




  #region datatable转list

  /// <summary>
  /// datatable转list
  /// </summary>
  /// <param name="dt"></param>
  /// <returns></returns>
  public static ObservableCollection<OrderModel> ConvertToList(DataTable dt)
  {

   // 定义集合
   ObservableCollection<OrderModel> ts = new ObservableCollection<OrderModel>();

   // 获得此模型的类型
   Type type = typeof(OrderModel);
   //定义一个临时变量
   string tempName = string.Empty;
   //遍历DataTable中所有的数据行
   foreach (DataRow dr in dt.Rows)
   {
    OrderModel t = new OrderModel();
    // 获得此模型的公共属性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    //遍历该对象的所有属性
    foreach (PropertyInfo pi in propertys)
    {
     tempName = pi.Name;//将属性名称赋值给临时变量
     //检查DataTable是否包含此列(列名==对象的属性名) 
     if (dt.Columns.Contains(tempName))
     {
      // 判断此属性是否有Setter
      if (!pi.CanWrite) continue;//该属性不可写,直接跳出
      //取值
      object value = dr[tempName];
      //如果非空,则赋给对象的属性
      if (value != DBNull.Value)
       pi.SetValue(t, value, null);
     }
    }
    //对象添加到泛型集合中
    ts.Add(t);
   }

   return ts;
  }

  #endregion

model页面的列中需要添加


  public ObservableCollection<OrderModel> ChildNodes { get; set; }
  public OrderModel()
  {
   ChildNodes = new ObservableCollection<OrderModel>();
  }

以上就是c# WPF中的TreeView使用详解的详细内容,更多关于c# WPF中的TreeView的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c# WPF中的TreeView使用详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C# 中如何使用TreeView组件

今天就跟大家聊聊有关C# 中如何使用TreeView组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.展开所有节点:要展开C# TreeView组件中的所有节点,首先就要把选定的
2023-06-17

C#中如何使用 treeview控件

C#中如何使用 treeview控件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C# treeview控件的使用方法步骤之一:首先当窗体加载的时候,我们添加上图中所示的节点。
2023-06-17

C#中TreeView组件如何使用

本篇文章为大家展示了C#中TreeView组件如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C# TreeView组件是由多个类来定义的,C# TreeView组件是由命名空间"System
2023-06-17

WinForms中的TreeView怎么使用

在WinForms中使用TreeView控件是比较简单的。以下是一个基本的使用示例:在Visual Studio中新建一个Windows Forms应用程序项目。打开窗体设计器,将TreeView控件拖放到窗体上。双击TreeView控件,
WinForms中的TreeView怎么使用
2024-03-13

c# WPF中CheckBox样式的使用方法

本篇内容主要讲解“c# WPF中CheckBox样式的使用方法 ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c# WPF中CheckBox样式的使用方法 ”吧!背景  很多时候我们使用WPF开
2023-06-07

浅析C# treeview控件的使用方法

C#中的treeview控件是用来显示层次结构数据的控件。它通常用于显示树形数据结构,比如文件目录结构、组织结构等。使用treeview控件的基本步骤如下:1. 在窗体上添加一个treeview控件。可以通过拖拽方式添加,也可以在代码中动态
2023-09-22

详解WPF中用户控件和自定义控件的使用

无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解
2023-03-02

C#中ArrayList 类的使用详解

ArrayList是C#中的一种动态数组,它可以存储任何类型的对象。以下是ArrayList类的使用详解:1. 导入命名空间:在使用ArrayList类之前,需要在文件的开头导入System.Collections命名空间。2. 创建Arr
2023-08-11

C#中怎么使用WPF进行GUI开发

要在C#中使用WPF进行GUI开发,首先需要创建一个WPF应用程序。以下是一些基本步骤:打开Visual Studio并选择“创建新项目”。在“新项目”对话框中,选择“WPF应用程序”模板,并设置项目的名称和位置。点击“确定”按钮,Vi
C#中怎么使用WPF进行GUI开发
2024-03-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录