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
Related examples in the same category