방법: 계층적 데이터에 마스터-세부 패턴 사용

이 예제에서는 마스터-세부 시나리오를 구현 하는 방법을 보여 줍니다.

예제

이 예제에서 LeagueList 는의 컬렉션입니다 Leagues . 각에 LeagueName 및 컬렉션이 있고 각에는 Divisions Division 이름 및 컬렉션이 있습니다 Teams . 각 Team 에는 팀 이름이 있습니다.

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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 .

마스터-세부 시나리오 예제를 보여 주는 스크린샷

이 예에서는 다음과 같은 두 가지 사항을 확인 해야 합니다.

  1. 세 개의 ListBox 컨트롤이 동일한 소스에 바인딩됩니다. 바인딩의 속성을 설정 하 여에 Path 표시할 데이터 수준을 지정 합니다 ListBox .

  2. IsSynchronizedWithCurrentItem true 추적할 선택 항목의 컨트롤에서 속성을로 설정 해야 합니다 ListBox . 이 속성을 설정 하면 선택한 항목이 항상로 설정 됩니다 CurrentItem . 또는 ListBox 에서 데이터를 가져오는 경우 CollectionViewSource 선택 및 통화를 자동으로 동기화 합니다.

XML 데이터를 사용 하는 경우 기술은 약간 다릅니다. 예제는 계층적 XML 데이터에 Master-Detail 패턴 사용을 참조 하세요.

참고 항목