WPF tree树控件递归动态绑定数据

在 WPF 中,可以使用 TreeView 控件来显示分层数据结构,如树形数据。为了实现递归动态绑定数据,我们通常使用 HierarchicalDataTemplate 来定义数据模板,并且使用数据绑定来递归地展示数据结构。以下是一个示例,演示如何实现递归动态绑定数据到 TreeView 控件。

目录

[1. 创建数据模型](#1. 创建数据模型)

[2. 创建数据结构](#2. 创建数据结构)

[3. 定义 XAML](#3. 定义 XAML)

[4. 运行程序](#4. 运行程序)

[5. 动态添加或删除节点](#5. 动态添加或删除节点)

6.总结


1. 创建数据模型

首先,定义一个用于表示树形结构的数据模型。假设我们有一个简单的文件夹和文件结构:

cs 复制代码
public class TreeNode
{
    public string Name { get; set; }
    public ObservableCollection<TreeNode> Children { get; set; }

    // 构造函数
    public TreeNode(string name)
    {
        Name = name;
        Children = new ObservableCollection<TreeNode>();
    }
}
  • Name 属性表示节点的名称。
  • Children 属性是该节点的子节点集合。

2. 创建数据结构

接下来,创建树形数据结构,并绑定到 TreeView 控件上:

cs 复制代码
public partial class MainWindow : Window
{
    public ObservableCollection<TreeNode> TreeData { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        TreeData = new ObservableCollection<TreeNode>();

        // 创建数据结构
        var root1 = new TreeNode("Root 1");
        var child1 = new TreeNode("Child 1.1");
        var child2 = new TreeNode("Child 1.2");

        root1.Children.Add(child1);
        root1.Children.Add(child2);

        var root2 = new TreeNode("Root 2");
        var child3 = new TreeNode("Child 2.1");

        root2.Children.Add(child3);

        TreeData.Add(root1);
        TreeData.Add(root2);

        // 将数据绑定到 TreeView
        this.DataContext = this;
    }
}

在这个例子中,我们创建了一个简单的树结构,包含两个根节点 Root 1Root 2,以及一些子节点。TreeData 是一个 ObservableCollection<TreeNode>,它用于存储根节点及其子节点。

3. 定义 XAML

接下来,我们在 XAML 中定义 TreeView 控件,并使用 HierarchicalDataTemplate 来定义数据模板:

cs 复制代码
<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TreeView Example" Height="350" Width="525">
    <Grid>
        <TreeView ItemsSource="{Binding TreeData}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </Grid>
</Window>

4. 运行程序

运行程序时,TreeView 控件将显示根节点及其子节点,支持递归绑定数据。当你点击某个节点时,它会展开并显示其子节点。

5. 动态添加或删除节点

因为 ObservableCollection 会自动通知 UI 数据的变化,你可以在运行时动态添加或删除节点,TreeView 会自动更新。例如,添加一个按钮来动态添加节点:

复制代码
cs 复制代码
private void AddNodeButton_Click(object sender, RoutedEventArgs e)
{
    if (TreeData.Count > 0)
    {
        TreeData[0].Children.Add(new TreeNode("New Child"));
    }
}

在 XAML 中定义一个按钮:

复制代码
XML 复制代码
<Button Content="Add Node" Click="AddNodeButton_Click" />

6.总结

通过使用 HierarchicalDataTemplate 和数据绑定,你可以轻松地在 WPF 中实现递归树形数据的展示。ObservableCollection 确保了数据动态变化时,UI 自动更新。

相关推荐
蜗牛~turbo23 分钟前
金蝶云星空 调价表取历史价格
java·数据库·sql·c#·database
~空中楼阁2 小时前
WPF WriteableBitmap 高性能双缓冲图片显示方案
wpf
伽蓝_游戏3 小时前
UGUI源码剖析(15):Slider的运行时逻辑与编辑器实现
游戏·ui·unity·性能优化·c#·游戏引擎·.net
太阳的后裔4 小时前
随笔一些用C#封装的控件
开发语言·c#
ISDF-工软未来18 小时前
C# 泛型简单案例
c#
I'mSQL20 小时前
WPF资源字典合并报错
wpf
疯狂的维修20 小时前
C#中一段程序类比博图
c#
时光追逐者1 天前
C#/.NET/.NET Core技术前沿周刊 | 第 53 期(2025年9.1-9.7)
c#·.net·.netcore
冷冷的菜哥1 天前
ASP.NET Core使用MailKit发送邮件
后端·c#·asp.net·发送邮件·mailkit
weixin_447103581 天前
C#之LINQ
c#·linq