방법: 계층적 데이터에 마스터-세부 패턴 사용
업데이트: 2007년 11월
이 예제에서는 마스터-세부 시나리오를 구현하는 방법을 보여 줍니다.
예제
이 예제에서 LeagueList는 Leagues 컬렉션입니다. 각 League에는 Name 및 Divisions 컬렉션이 있으며 각 Division에는 이름 및 Teams 컬렉션이 있습니다. 각 Team에는 팀 이름이 있습니다.
<Window
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:SDKSample"
Width="400" Height="180"
Title="Master-Detail Binding"
Background="Silver">
<Window.Resources>
<src:LeagueList x:Key="MyList"/>
...
<DockPanel DataContext="{Binding Source={StaticResource MyList}}">
<StackPanel>
<Label>My Soccer Leagues</Label>
<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name"
IsSynchronizedWithCurrentItem="true"/>
</StackPanel>
<StackPanel>
<Label Content="{Binding Path=Name}"/>
<ListBox ItemsSource="{Binding Path=Divisions}" DisplayMemberPath="Name"
IsSynchronizedWithCurrentItem="true"/>
</StackPanel>
<StackPanel>
<Label Content="{Binding Path=Divisions/Name}"/>
<ListBox DisplayMemberPath="Name" ItemsSource="{Binding Path=Divisions/Teams}"/>
</StackPanel>
</DockPanel>
</Window>
다음은 예제의 스크린 샷입니다. Divisions ListBox는 Leagues ListBox의 선택 항목을 자동으로 추적하고 해당 데이터를 표시합니다. Teams ListBox는 다른 두 ListBox 컨트롤의 선택 항목을 추적합니다.
이 예제에서 주목해야 할 두 가지 내용은 다음과 같습니다.
세 ListBox 컨트롤은 같은 소스에 바인딩됩니다. 바인딩의 Path 속성을 설정하여 ListBox에 표시할 데이터의 수준을 지정할 수 있습니다.
추적하는 선택 항목의 ListBox 컨트롤에서 IsSynchronizedWithCurrentItem 속성을 true로 설정해야 합니다. 이 속성을 설정하면 선택한 항목이 항상 CurrentItem으로 설정됩니다. ListBox가 CollectionViewSource에서 데이터를 가져오는 경우에는 선택 항목과 통화가 자동으로 동기화됩니다.
전체 샘플을 보려면 ObjectDataProvider를 사용한 마스터-세부 시나리오 샘플을 참조하십시오. XML 데이터를 사용할 경우에는 방법이 약간 다릅니다. 예제를 보려면 방법: 계층적 XML 데이터에 마스터-세부 패턴 사용을 참조하십시오.