首页 > 编程语言 >WPF/C#:如何显示具有层级关系的数据

WPF/C#:如何显示具有层级关系的数据

时间:2024-04-22 15:35:23浏览次数:16  
标签:层级 Name C# HierarchicalDataTemplate Student new WPF Class

前言

比方说我们有以下两个类:

 public class Class
 {
     public string? Name { get; set; }
     public List<Student>? Students { get; set; }
 }
 public class Student
 {
     public string? Name { get; set; }
 }

一个表示班级,一个表示学生,一个班级包含多个学生。在WPF中我们该如何显示这种具有层级关系的数据呢?

今天给大家介绍的是用TreeViewHierarchicalDataTemplate进行显示。

实现效果如下所示:

效果

如果你对此感兴趣,可以接着往下阅读。

创建数据

 private void Button_Click(object sender, RoutedEventArgs e)
 {
     Student student1 = new Student() { Name = "小明" };
     Student student2 = new Student() { Name = "小红" };
     Student student3 = new Student() { Name = "小黄" };
     Student student4 = new Student() { Name = "小绿" };
     Student student5 = new Student() { Name = "小刚" };

     List<Student> students1 = new List<Student>()
     {
         student1,
         student2,
         student3
     };

     List<Student> students2 = new List<Student>()
     {              
         student4,
         student5
     };

     Class class1 = new Class()
     {
         Name = "班级1",
         Students = students1
     };

     Class class2 = new Class()
     {
         Name = "班级2",
         Students = students2
     };

     List<Class> classes = new List<Class>()
     {
         class1,
         class2
     };

     DataContext = classes;

 }

数据模板的使用

xaml:

  <TreeView>
      <TreeViewItem ItemsSource="{Binding}" Header="全部班级"/>
  </TreeView>

HierarchicalDataTemplate介绍

HierarchicalDataTemplateWPF(Windows Presentation Foundation)中的一种数据模板,用于在树状结构或层次结构中显示数据。它允许您定义如何呈现包含子项的数据对象。

通过HierarchicalDataTemplate,您可以指定一个模板,用于呈现数据对象本身,以及一个模板,用于呈现其子项。这使得在TreeView等控件中轻松显示复杂的数据结构,如文件夹和文件、组织架构等。

通常,您会在ItemsSource属性中指定数据源,然后使用HierarchicalDataTemplate定义每个级别的数据对象应该如何呈现。

通过使用HierarchicalDataTemplate,您可以更灵活地控制数据的呈现方式,使您能够创建具有深层次结构的动态UI。

HierarchicalDataTemplate的使用

xaml:

<Window.Resources>
    <HierarchicalDataTemplate DataType = "{x:Type local2:Class}"
       ItemsSource = "{Binding Path=Students}">
        <TextBlock Text="{Binding Path=Name}"/>
    </HierarchicalDataTemplate>

    <DataTemplate DataType="{x:Type local2:Student}">
        <TextBlock Text="{Binding Path=Name}"/>
    </DataTemplate>
</Window.Resources>

我们可以发现对于Class类,使用了一个HierarchicalDataTemplateItemsSource绑定的是Class类的Students属性。

Student类并没有再含有层次数据了所有直接使用DataTemplate就好了。

查看实现效果

最后实现的效果如下所示:

效果

总结

在日常开发过程中,我们可能也会有显示层级数据的需求,本文通过一个简单的Demo,介绍了在WPF中通过TreeView控件HierarchicalDataTemplate层级数据模板进行层级数据的显示。希望对正在学习WPF或者对WPF感兴趣的同学有所帮助。

标签:层级,Name,C#,HierarchicalDataTemplate,Student,new,WPF,Class
From: https://www.cnblogs.com/mingupupu/p/18150708

相关文章

  • DDD领域驱动设计总结和C#代码示例
    DDD(领域驱动设计)是一种软件设计方法,它强调以业务领域为核心来驱动软件的设计和开发。DDD的设计初衷是为了解决复杂业务领域的设计和开发问题,它提供了一套丰富的概念和模式,帮助开发者更好地理解和建模业务领域,从而提高软件的质量和可维护性。一、DDD主要组成DDD的主要模式包......
  • android studio Edit Custom VM Options后无法启动
    异常描述:想要修改虚拟器的内存,就百度了方法,设置了Help——EditCustomVMOptions,然后AndroidStudio就无法启动了,直接弹这个弹窗:所以,建议大家写文,还是要有头有尾,该上图上图,不能啪啪几个字让人猜啊,容易误导人的啊啊啊!!!解决问题:按这个路径查找到更改的文件,C:\Users\XXXX\AppDat......
  • C语言——函数基本知识
    什么是函数函数的定义函数就是程序中独立的功能。(简单来说就是把代码打包成整体,起个名字,方便以后使用)函数的使用定义函数的格式格式:返回值类型函数名(形参1,形参2,...){ 函数体; return返回值;}例子:intmax(intnum1,intnum2){ inta; if(num1>num2)......
  • Node.js数电票、全电票查验接口示例、发票查验、票据OCR API
    何为数电票:数电票全称为全面数字化的电子发票,是一种全新的发票形式,与传统的纸质发票具有同等的法律效力,以数字形式存在,不依赖于纸质介质,而数电票的推行旨在提高发票管理效率,降低企业成本,推动税收征管的现代化进程。发票查验的自动化和智能化管理,可以显著减少人工核对发票......
  • 驻极体话筒(MIC)、三极管、led组成的声控led闪光电路分析
    电路:声控LED闪烁灯这里介绍一个通过声音控制LED闪光的简单电路,将它挂在室内音响或电视机的扬声器附近,LED会随喇叭播放的音色声而闪闪发光。电路图如下。 电路工作过程:1、电路上电后,周围环境无声音时,三极管Q1,基极电阻R1,集电极电阻R3,刚好是三极管的一个基极偏置电路,三极管Q1......
  • day18_我的Java学习笔记 (Logback日志框架、阶段项目--详见视频教程)
    1.日志框架1.1日志技术的概述1.2日志技术体系结构1.3Logback概述需要3个文件:1.4Logback快速入门1.4.1在项目下新建lib文件夹,导入Logback的相关jar包,并全选右键添加到项目依赖库中新建工程:logback-app将3个jar包拷贝到lib目录下全选,右键,选择......
  • Two Sided Cards 题解
    前言五一网课的例题,但是网上没有详细的题解(真的连题解都找不到啊),所以来写一篇,就当攒RP了。题目可以在这里提交。原题是TopCoder-10947,但是有了账号也交不了?题目简述有\(n\)张卡片,正面和反面分别组成了\(1\simn\)的排列。现在你需要将这\(n\)张卡片排成一排。卡片......
  • 使用pipenv后,如何在pycharm中添加解释器
    问题:我用pyenv安装的python3.10,执行pyenvwhichpython3.10显示:/Users/hxjs/.pyenv/versions/3.10.0/bin/python3.10那系统级别的python解释器路径就是:/Users/hxjs/.pyenv/versions/3.10.0/bin/python3.10我在项目下,使用pipenv--python3.10给项目安装了python3.10,并使用pi......
  • The 18-th Beihang University Collegiate Programming Contest (BCPC 2023) - Final
    https://codeforces.com/gym/104883A#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingvi=vector<int>;i32main(){ios::sync_with_stdio(false),cin.tie(nullptr);i64n,sum=0;c......
  • 浅谈sparse vec检索工程化实现
    前面我们通过两篇文章:BGEM3-Embedding模型介绍和Sparse稀疏检索介绍与实践介绍了sparse稀疏检索,今天我们来看看如何建立一个工程化的系统来实现sparsevec的检索。之前提过milvus最新的V2.4支持sparse检索,我们先看看milvus的实现。milvus的sparse检索实现milvus检索......