<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MasterDetailBinding"
xmlns:local="clr-namespace:WpfApplication1">
<Window.Resources>
<local:Companies x:Key="Companies">
<local:Company CompanyName="Stooge">
<local:Company.Members>
<local:Team>
<local:Employee Name="Larry" Age="21">
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="A" />
<local:Skill Description="B" />
<local:Skill Description="C" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
<local:Employee Name="Moe" Age="22" >
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="D" />
<local:Skill Description="E" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
<local:Employee Name="Curly" Age="23" >
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="F" />
<local:Skill Description="G" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
</local:Team>
</local:Company.Members>
</local:Company>
<local:Company CompanyName="Addams">
<local:Company.Members>
<local:Team>
<local:Employee Name="Gomez" Age="135" >
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="H" />
<local:Skill Description="Z" />
<local:Skill Description="Q" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
<local:Employee Name="Morticia" Age="121" >
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="R" />
<local:Skill Description="P" />
<local:Skill Description="L" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
<local:Employee Name="Fester" Age="137" >
<local:Employee.Skills>
<local:Skills>
<local:Skill Description="R" />
<local:Skill Description="S" />
<local:Skill Description="U" />
</local:Skills>
</local:Employee.Skills>
</local:Employee>
</local:Team>
</local:Company.Members>
</local:Company>
</local:Companies>
</Window.Resources>
<Grid DataContext="{StaticResource Companies}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0">Companies:</TextBlock>
<ListBox Grid.Row="1" Grid.Column="0" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=CompanyName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
<TextBlock Text="{Binding Path=CompanyName}" />
<TextBlock Text=" Company Members:" />
</StackPanel>
<ListBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Path=Members}" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding Path=Name}" />
(age: <TextBlock Text="{Binding Path=Age}" />)
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Row="0" Grid.Column="2" Orientation="Horizontal">
<TextBlock Text="{Binding Path=Members/Name}" />
<TextBlock Text=" Skills:" />
</StackPanel>
<ListBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding Path=Members/Skills}" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Description}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</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 Skill
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 Skills
Inherits ObservableCollection(Of Skill)
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 Skills
Public Property Skills() As Skills
Get
Return traits
End Get
Set
traits = value
End Set
End Property
End Class
Public Class Team
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 Team
Public Property Members() As Team
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