WPF控件TreeView应用示例

1、基本应用
内容固定,在xaml中直接显示。
(1)、MainWindow.xaml代码

<TreeView>
            <TreeViewItem Header="水果第一级">
                <TreeViewItem Header="水果第二级">
                    <TreeViewItem Header="水果第三级"/>
                </TreeViewItem>
            </TreeViewItem>
            <TreeViewItem Header="蔬菜第一级"/>
            <TreeViewItem Header="肉类第一级"/>
        </TreeView>

(2)、运行效果
在这里插入图片描述
2、同种类型数据动态加载
(1)、目录架构
在这里插入图片描述
(2)、TreeViewModel.cs

internal class TreeViewModel
    {
        public string Name { get; set; }
        public ObservableCollection<TreeViewModel> Children { get; set; } = new ObservableCollection<TreeViewModel>();
    }

(3)、TreeViewViewModel.cs

internal class TreeViewViewModel
    {
        private TreeViewModel treeViewModelRoot = new TreeViewModel();

        public TreeViewModel TreeViewModelRoot
        {
            get { return treeViewModelRoot; }
            set { treeViewModelRoot = value; }
        }

        public TreeViewViewModel()
        {
            InitTree();
        }

        private void InitTree()
        {
            for(int i = 0; i < 5; i++)
            {
                TreeViewModel treeViewModel = new TreeViewModel();
                treeViewModel.Name = $"第{i+1}级";
                for(int j = 0; j < 5; j++)
                {
                    TreeViewModel treeViewModel1 = new TreeViewModel();
                    treeViewModel1.Name = $"第{i + 1}-----{j + 1}级";
                    treeViewModel.Children.Add(treeViewModel1);
                }
                TreeViewModelRoot.Children.Add(treeViewModel);
            }
        }
    }

(4)、MainWindow.xaml

<Window x:Class="WpfTreeViewApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfTreeViewApp"
        xmlns:viewModels="clr-namespace:WpfTreeViewApp.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <viewModels:TreeViewViewModel x:Name="viewModel"/>
    </Window.DataContext>
    <TreeView ItemsSource="{Binding TreeViewModelRoot.Children}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</Window>

(5)、运行效果
在这里插入图片描述
3、不同类型数据动态加载
文件目录架构不变。
(1)、TreeViewModel.cs

internal class TreeViewModel
    {
        public ObservableCollection<TreeViewModel1> ChildrenModel1 { get; set; } = new ObservableCollection<TreeViewModel1>();
    }
    internal class TreeViewModel1
    {
        public string Name { get; set; }
        public ObservableCollection<TreeViewModel2> ChildrenModel2 { get; set; } = new ObservableCollection<TreeViewModel2>();
    }
    internal class TreeViewModel2
    {
        public string ID { get; set; }
        public ObservableCollection<TreeViewModel3> ChildrenModel3 { get; set; } = new ObservableCollection<TreeViewModel3>();
    }
    internal class TreeViewModel3
    {
        public string Description { get; set; }
    }

(2)、TreeViewViewModel.cs

internal class TreeViewViewModel
    {
        private TreeViewModel treeViewModelRoot = new TreeViewModel();

        public TreeViewModel TreeViewModelRoot
        {
            get { return treeViewModelRoot; }
            set { treeViewModelRoot = value; }
        }

        public TreeViewViewModel()
        {
            InitTree();
        }

        private void InitTree()
        {
            for(int i = 0; i < 5; i++)
            {
                TreeViewModel1 treeViewModel1 = new TreeViewModel1();
                treeViewModel1.Name = $"Name第{i+1}级";
                for(int j = 0; j < 5; j++)
                {
                    TreeViewModel2 treeViewModel2 = new TreeViewModel2();
                    treeViewModel2.ID = $"ID第{i + 1}-----{j + 1}级";
                    for(int k = 0; k < 5; k++)
                    {
                        TreeViewModel3 treeViewModel3 = new TreeViewModel3();
                        treeViewModel3.Description = $"Description第{i + 1}--{j + 1}--{k + 1}";
                        treeViewModel2.ChildrenModel3.Add(treeViewModel3);
                    }
                    treeViewModel1.ChildrenModel2.Add(treeViewModel2);
                }
                TreeViewModelRoot.ChildrenModel1.Add(treeViewModel1);
            }
        }
    }

(3)、MainWindow.xaml

 <Window.DataContext>
        <viewModels:TreeViewViewModel x:Name="viewModel"/>
    </Window.DataContext>
    <TreeView ItemsSource="{Binding TreeViewModelRoot.ChildrenModel1}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding ChildrenModel2}">
                <TextBlock Text="{Binding Name}"/>
                <HierarchicalDataTemplate.ItemTemplate >
                    <HierarchicalDataTemplate ItemsSource="{Binding ChildrenModel3}">
                        <TextBlock Text="{Binding ID}"/>
                        <HierarchicalDataTemplate.ItemTemplate >
                            <DataTemplate>
                                <TextBlock Text="{Binding Description}"/>
                            </DataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                    </HierarchicalDataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

(4)、运行结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值