Hierarchical TreeView in WPF

Introduction

Bellow code example contains Hierarchical tree view

XAML Code

<TreeView HorizontalAlignment="Left" Height="307" VerticalAlignment="Top" Width="397" Name="filterableTreeview" SelectedItemChanged="filterableTreeview_SelectedItemChanged">

<TreeView.ItemTemplate>

<HierarchicalDataTemplate x:Name="lvl1" ItemsSource="{Binding Path=Juniors1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

<TextBlock FontWeight="Normal" FontSize="14" Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

<HierarchicalDataTemplate.ItemTemplate>

<HierarchicalDataTemplate ItemsSource="{Binding Path=Juniors1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

<TextBlock FontWeight="Normal" FontSize="14" Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

<HierarchicalDataTemplate.ItemTemplate >

<HierarchicalDataTemplate>

<TextBlock FontWeight="Normal" FontSize="14" Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

</HierarchicalDataTemplate>

</HierarchicalDataTemplate.ItemTemplate>

</HierarchicalDataTemplate>

</HierarchicalDataTemplate.ItemTemplate>

</HierarchicalDataTemplate>

</TreeView.ItemTemplate>

</TreeView>

 
Code to bind items with treeview

C# Code
 

private void Window_Loaded_1(object sender, RoutedEventArgs e)

{

     List<Employee> emps = new List<Employee>();

    emps.Add(new Employee() { ID = 1, Name = "Kailash1" });

    emps.Add(new Employee() { ID = 2, Name = "Kailash2" });

    emps.Add(new Employee() { ID = 3, Name = "Kailash3" });

    emps.Add(new Employee() { ID = 4, Name = "Kailas4" });

    emps.Add(new Employee() { ID = 5, Name = "Kailas5" });

    Employee emp1 = new Employee();

    emp1.Name = "Juniors16";

    emp1.Juniors1 = new List<Employee>();

    emp1.Juniors1.Add(new Employee() { ID = 113, Name = "Juniors113" });

    emp1.Juniors1.Add(new Employee() { ID = 123, Name = "Juniors123" });

    emp1.Juniors1.Add(new Employee() { ID = 133, Name = "Juniors133" });

    emp1.Juniors1.Add(new Employee() { ID = 143, Name = "Juniors143" });

    emp1.Juniors1.Add(new Employee() { ID = 153, Name = "Juniors153" });

    Employee emp = new Employee();

    emp.Name = "Kailash6";

    emp.Juniors1 = new List<Employee>();

    emp.Juniors1.Add(new Employee() { ID = 11, Name = "Juniors11" });

    emp.Juniors1.Add(new Employee() { ID = 12, Name = "Juniors12" });

    emp.Juniors1.Add(new Employee() { ID = 13, Name = "Juniors13" });

    emp.Juniors1.Add(new Employee() { ID = 14, Name = "Juniors14" });

    emp.Juniors1.Add(new Employee() { ID = 15, Name = "Juniors15" });

    emp.Juniors1.Add(emp1);

    emps.Add(emp);

    this.filterableTreeview.ItemsSource = emps;

}

code to dynamically added child items to treeview item

C# Code
 

private void filterableTreeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)

{

    //TreeViewItem TVI = (TreeViewItem)filterableTreeview.ItemContainerGenerator.ContainerFromItem(e.NewValue);

    //DirectoryInfo di = (DirectoryInfo)e.NewValue;

    //TVI.ItemsSource=di.GetDirectories();

    Employee emp = (Employee)e.NewValue;

    emp.Juniors1 = new List<Employee>();

    emp.Juniors1.Add(new Employee() { ID = 11, Name = "Juniors11" });

    emp.Juniors1.Add(new Employee() { ID = 12, Name = "Juniors12" });

    emp.Juniors1.Add(new Employee() { ID = 13, Name = "Juniors13" });

    emp.Juniors1.Add(new Employee() { ID = 14, Name = "Juniors14" });

    emp.Juniors1.Add(new Employee() { ID = 15, Name = "Juniors15" });

    e.Handled = true;

}