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

Mise à jour : novembre 2007

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.

Pour l'exemple complet, consultez Scénario maître/détail utilisant ObjectDataProvider, exemple. 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

Concepts

Vue d'ensemble de la liaison de données

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

Référence

HierarchicalDataTemplate

Autres ressources

Exemples de liaisons de données

Rubriques Comment relatives aux liaisons de données