Comment : utiliser le modèle maître/détail avec des données hiérarchiques

Cet exemple indique comment implémenter le scénario maître/détail.

Exemple

Dans cet exemple, LeagueList est une collection de Leagues. Chaque League a un Name et une collection de Divisions et chaque Division a un nom et une collection d'Teams. Chaque Team a un nom d'équipe.

<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>

La capture d'écran suivante illustre l'exemple. DivisionsListBox suit automatiquement des sélections dans LeaguesListBox et affiche les données correspondantes. TeamsListBox suit des sélections dans les deux autres contrôles ListBox.

Exemple de détails principaux

Les deux choses à remarquer dans cet exemple sont :

  1. Les trois contrôles ListBox sont liés à la même source. Vous devez définir la propriété Path de la liaison pour spécifier le niveau de données affiché par ListBox.

  2. Vous devez affecter true à la propriété IsSynchronizedWithCurrentItem sur les contrôles ListBox dont vous suivez la sélection. La définition de cette propriété garantit que l'élément sélectionné est toujours défini comme CurrentItem. Ou bien, si ListBox obtient ses données à partir de CollectionViewSource, celui-ci synchronise automatiquement la sélection et la devise.

La technique est légèrement différente lorsque vous utilisez des données XML. Pour obtenir un exemple, consultez Comment : utiliser le modèle maître/détail avec des données XML hiérarchiques.

Voir aussi

Tâches

Comment : effectuer une liaison à une collection et afficher des informations basées sur la sélection

Référence

HierarchicalDataTemplate

Concepts

Vue d'ensemble de la liaison de données

Vue d'ensemble des modèles de données

Autres ressources

Rubriques "Comment" relatives aux liaisons de données