Displaying List of Folders and Files using TreeView in WPF
In this article We are going to see how we can use TreeView control to display the List of Folders and Files present in a particular drive or location on your computer using WPF. Here we are using two listviews, one to display the list of Folders and other one to display the list of Files present in a folder.
In this article We are going to see how we can use TreeView control to display the List of Folders and Files present in a particular drive or location on your computer using WPF.
1. Create a WPF Application project in C# and name it as "FolderNavigationDemo".
2. Add a class to this project and name it as "Folder". This class has four properties as listed below.
a,Name: It contains the name of the folder.
b,FullPath: It contains the Full Path of the folder.
c,Files: It contains the list of files present in a directory.
d,SubFolders: It returns the subdirectories present in the current directory.
3. The code for the Folder class is shown below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace FolderNavigationDemo
{
public class Folder
{
private DirectoryInfo _folder;
private List
private List
public Folder()
{
this.FullPath = @"C:\";
}
public string Name
{
get
{
return this._folder.Name;
}
set
{
}
}
public string FullPath
{
get
{
return this._folder.FullName;
}
set
{
if (Directory.Exists(value))
{
this._folder = new DirectoryInfo(value);
}
else
{
throw new ArgumentException("Directory must exist", "full path");
}
}
}
public List
{
get
{
if (this._files == null)
{
this._files = new List
FileInfo[] fi = this._folder.GetFiles();
for (int i = 0; i < fi.Length; i++)
{
this._files.Add(fi[i]);
}
}
return this._files;
}
}
public List
{
get
{
if (this._subFolders == null)
{
this._subFolders = new List
DirectoryInfo[] di = this._folder.GetDirectories();
for (int i = 0; i < di.Length; i++)
{
Folder newFolder = new Folder();
newFolder.FullPath = di[i].FullName;
this._subFolders.Add(newFolder);
}
}
return this._subFolders;
}
}
}
}
4. Save the above class and then open MainWindow.xaml. In this xaml file we are going to have a TreeView Control which displays the list of Folders and Files in C: Drive using other 2 ListView controls.
The ListView "lvSubFolders" lists all the SubFolders present in a Directory and other ListView "lvFiles" displays all the Files present in a Folder.
5. Below is the code of MainWindow.xaml file:
<Window x:Class="FolderNavigationDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:FolderNavigationDemo"
Title="Folder Navigation" Height="350" Width="525">
<Window.Resources>
<ObjectDataProvider x:Key="MainFolderDataProvider">
<ObjectDataProvider.ObjectInstance>
<my:Folder FullPath="c:\"></my:Folder>
</ObjectDataProvider.ObjectInstance>
</ObjectDataProvider>
<HierarchicalDataTemplate DataType="{x:Type my:Folder}" ItemsSource="{Binding Path=SubFolders}">
<TextBox Text="{Binding Path=Name}"></TextBox>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TreeView Grid.ColumnSpan="1" Grid.RowSpan="2" Margin="0,0,0,0" Name="trvFiles">
<TreeViewItem ItemsSource="{Binding Path=SubFolders, Source={StaticResource MainFolderDataProvider}}" Header="Folders"></TreeViewItem>
</TreeView>
<ListView Name="lvSubFolders" ItemsSource="{Binding Path=SelectedItem.SubFolders,ElementName=trvFiles, Mode=OneWay}" Grid.Column="1" Grid.RowSpan="1"></ListView>
<ListView Name="lvFiles" ItemsSource="{Binding Path=SelectedItem.Files,ElementName=trvFiles, Mode=OneWay}" Grid.Column="1" Grid.Row="1"></ListView>
</Grid>
</Window>
Can you please be more precise regarding the library files that you are using?
As in the latest WPF .net framework version 4.0 it is by default System.Windows.Controls and most of your code is good with System.Windows.Forms and there are similar functions used in both the library files and error throws out. Can you please be more accurate if I can use controls to display folders, sub-folders and files in a treeview for WPF C# application?