Cómo: Usar el patrón principal-detalle con datos jerárquicos

En este ejemplo se muestra cómo implementar el patrón principal-detalle con datos jerárquicos.

Ejemplo

En este ejemplo, LeagueList es una colección de Leagues. Cada League tiene un valor Name y una colección de Divisions y cada Division tiene un nombre y una colección de Teams. Cada Team tiene un nombre de equipo.

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

A continuación, se muestra una captura de pantalla del ejemplo. El control ListBox Divisions realiza automáticamente el seguimiento de las selecciones en el control ListBox Leagues y muestra los datos correspondientes. El control ListBox Teams realiza el seguimiento de las selecciones en los otros dos controles ListBox.

Ejemplo Master-detail

Los dos puntos importantes de este ejemplo son:

  1. Los tres controles ListBox están enlazados al mismo origen. Debe establecer la propiedad Path del enlace para especificar qué nivel de datos desea que muestre el control ListBox.

  2. Debe establecer la propiedad IsSynchronizedWithCurrentItem en true en los controles ListBox de la selección de la que está realizando el seguimiento. Al establecer esta propiedad se garantiza que el elemento seleccionado se establezca siempre como CurrentItem. Como alternativa, si el control ListBox obtiene sus datos de un objeto CollectionViewSource, sincronizará automáticamente la selección y la actualización.

La técnica es ligeramente diferente cuando se utilizan datos XML. Para obtener un ejemplo, vea Cómo: Usar el patrón principal-detalle con datos XML jerárquicos.

Vea también

Tareas

Cómo: Enlazar a una colección y mostrar información basada en la selección

Referencia

HierarchicalDataTemplate

Conceptos

Información general sobre el enlace de datos

Información general sobre plantillas de datos

Otros recursos

Temas "Cómo..." sobre enlace de datos