Hi, try following demo:
<Window x:Class="WpfApp1.Window48"
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:WpfApp48"
mc:Ignorable="d"
Title="Window48" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<Grid>
<TreeView ItemsSource="{Binding View}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Folder}" ItemsSource="{Binding SubFolders}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Data;
using IO = System.IO;
namespace WpfApp48
{
public class ViewModel
{
public ViewModel()
{
string path = @"c:\temp";
foreach (var dir in Directory.GetDirectories(path)) LoadFolder(dir, col);
cvs.Source = col;
}
private void LoadFolder(string path, ObservableCollection<Folder> col)
{
Folder folder = new Folder() { Name = IO.Path.GetFileNameWithoutExtension(path) };
col.Add(folder);
foreach (var dir in Directory.GetDirectories(path)) LoadFolder(dir, folder.SubFolders);
}
public ICollectionView View { get => cvs.View; }
private CollectionViewSource cvs = new CollectionViewSource();
private ObservableCollection<Folder> col = new ObservableCollection<Folder>();
}
public class Folder
{
public string Name { get; set; }
public ObservableCollection<Folder> SubFolders { get; set; } = new ObservableCollection<Folder>();
}
}