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 自动更新。

相关推荐
明耀30 分钟前
WPF C# 用WebView加载H5页面(uniapp项目,vue项目)
uni-app·c#·wpf
我不是程序猿儿5 小时前
【C#】 lock 关键字
java·开发语言·c#
动感光博9 小时前
Unity序列化字段、单例模式(Singleton Pattern)
unity·单例模式·c#
黑洞视界10 小时前
NCC Mocha v0.2.0 发布, 新增对 Metrics 的支持
c#·.net·可观测性·observability
FAREWELL0007510 小时前
Unity基础学习(十五)核心系统——音效系统
学习·unity·c#·游戏引擎
zimoyin12 小时前
Java 快速转 C# 教程
java·开发语言·c#
向宇it12 小时前
【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
开发语言·ui·unity·c#·编辑器·游戏引擎
动感光博12 小时前
Unity碰撞检测(射线投射、胶囊体投射)、交互(图层、掩码)
unity·c#·游戏引擎·游戏程序·动画
动感光博14 小时前
Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
开发语言·人工智能·计算机视觉·unity·c#·游戏引擎
hie9889417 小时前
C#与KepOPC通讯
开发语言·c#