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)、运行结果