Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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