Hierarchical Binding for three level nested objects
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="HierarchicalBinding" xmlns:local="clr-namespace:WpfApplication1"> <Window.Resources> <local:Companies x:Key="Companies"> <local:Company CompanyName="CompanyA"> <local:Company.Members> <local:People> <local:Employee Name="EmployeeA" Age="21"> <local:Employee.Comments> <local:Comments> <local:Comment Description="Comment1" /> <local:Comment Description="Comment2" /> <local:Comment Description="Comment3" /> </local:Comments> </local:Employee.Comments> </local:Employee> <local:Employee Name="Moe" Age="22" > <local:Employee.Comments> <local:Comments> <local:Comment Description="Nice" /> <local:Comment Description="Comment3" /> </local:Comments> </local:Employee.Comments> </local:Employee> <local:Employee Name="Curly" Age="23" > <local:Employee.Comments> <local:Comments> <local:Comment Description="Comment6" /> <local:Comment Description="Comment3" /> </local:Comments> </local:Employee.Comments> </local:Employee> </local:People> </local:Company.Members> </local:Company> <local:Company CompanyName="CompanyB"> <local:Company.Members> <local:People> <local:Employee Name="EmployeeB" Age="135" > <local:Employee.Comments> <local:Comments> <local:Comment Description="Comment8" /> <local:Comment Description="Comment7" /> <local:Comment Description="Comment5" /> </local:Comments> </local:Employee.Comments> </local:Employee> <local:Employee Name="EmployeeC" Age="121" > <local:Employee.Comments> <local:Comments> <local:Comment Description="Comment8" /> <local:Comment Description="Pale" /> <local:Comment Description="Comment4" /> </local:Comments> </local:Employee.Comments> </local:Employee> <local:Employee Name="EmployeeD" Age="137" > <local:Employee.Comments> <local:Comments> <local:Comment Description="Comment8" /> <local:Comment Description="Comment6" /> <local:Comment Description="Comment3" /> </local:Comments> </local:Employee.Comments> </local:Employee> </local:People> </local:Company.Members> </local:Company> </local:Companies> <HierarchicalDataTemplate DataType="{x:Type local:Company}" ItemsSource="{Binding Path=Members}"> <TextBlock Text="{Binding Path=CompanyName}" /> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType="{x:Type local:Employee}" ItemsSource="{Binding Path=Comments}"> <TextBlock> <TextBlock Text="{Binding Path=Name}" /> (age: <TextBlock Text="{Binding Path=Age}" />) </TextBlock> </HierarchicalDataTemplate> <DataTemplate DataType="{x:Type local:Comment}"> <TextBlock Text="{Binding Path=Description}" /> </DataTemplate> </Window.Resources> <TreeView DataContext="{StaticResource Companies}"> <TreeViewItem ItemsSource="{Binding}" Header="Companies" /> </TreeView> </Window> //File:Window.xaml.vb Imports System Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Data Imports System.Windows.Documents Imports System.Windows.Media Imports System.Windows.Shapes Imports System.Collections.ObjectModel Namespace WpfApplication1 Public Class Comment Private m_description As String Public Property Description() As String Get Return m_description End Get Set m_description = value End Set End Property End Class Public Class Comments Inherits ObservableCollection(Of Comment) End Class Public Class Employee Private m_name As String Public Property Name() As String Get Return m_name End Get Set m_name = value End Set End Property Private m_age As Integer Public Property Age() As Integer Get Return m_age End Get Set m_age = value End Set End Property Private traits As Comments Public Property Comments() As Comments Get Return traits End Get Set traits = value End Set End Property End Class Public Class People Inherits ObservableCollection(Of Employee) End Class Public Class Company Private familyName As String Public Property CompanyName() As String Get Return familyName End Get Set familyName = value End Set End Property Private m_members As People Public Property Members() As People Get Return m_members End Get Set m_members = value End Set End Property End Class Public Class Companies Inherits ObservableCollection(Of Company) End Class Public Partial Class Window1 Inherits Window Public Sub New() InitializeComponent() End Sub End Class End Namespace