Compartir a través de


Cómo usar el patrón Master-Detail con datos jerárquicos

En este ejemplo se muestra cómo implementar el escenario master-detail.

Ejemplo

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

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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 DivisionsListBox realiza un seguimiento automático de las selecciones en el LeaguesListBox y muestra los datos correspondientes. Teams ListBox rastrea las selecciones en los otros dos controles ListBox.

Captura de pantalla que muestra un ejemplo de escenario maestro-detalle.

Las dos cosas que se deben observar en este ejemplo son:

  1. Los tres ListBox controles se enlazan al mismo origen. Ajuste la propiedad de Path de la vinculación para especificar el nivel de datos que desea que ListBox muestre.

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

La técnica es ligeramente diferente cuando se usan datos XML. Para obtener un ejemplo, vea Usar el patrón Master-Detail con datos XML jerárquicos.

Consulte también