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

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

Пример

В этом примере 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, он автоматически синхронизирует выбор и денежные единицы.

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

См. также

Задачи

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

Ссылки

HierarchicalDataTemplate

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

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

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

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

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