Практическое руководство. Использование шаблона "основной-подчиненный" с иерархическими данными

Обновлен: Ноябрь 2007

В этом примере описывается, как реализовать сценарий с отношением «основной-подчиненный».

Пример

В этом примере 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.

Подробный пример

В этом примере следует обратить внимание на два обстоятельства.

  1. Три элемента управления ListBox привязываются к одному источнику. Необходимо установить свойство Path привязки для определения уровня данных, которые нужно отобразить в ListBox.

  2. Необходимо задать для свойства IsSynchronizedWithCurrentItem значение true для элемента управления ListBox, из которого осуществляется отслеживание выбора. Установка этого свойства гарантирует, что выбранный элемент всегда устанавливается как CurrentItem. Кроме того, если ListBox получает данные от CollectionViewSource, то он автоматически синхронизирует выбор и денежные единицы.

Полный пример см. в разделе Пример сценария "главный-подчиненный" с использованием ObjectDataProvider. При использовании данных XML метод немного отличается. Пример см. в разделе Практическое руководство. Использование шаблона "основной-подробности" с иерархическими данными XML.

См. также

Задачи

Практическое руководство. Выполнение привязки к коллекции и вывод сведений в зависимости от выделенного элемента

Основные понятия

Общие сведения о связывании данных

Общие сведения о шаблонах данных

Ссылки

HierarchicalDataTemplate

Другие ресурсы

Примеры привязки данных

Практические руководства по привязке данных