Compartilhar via


Como usar o padrão Master-Detail com dados hierárquicos

Este exemplo mostra como implementar o cenário principal-detalhe.

Exemplo

Neste exemplo, LeagueList é uma coleção de Leagues. Cada League tem uma Name e uma coleção de Divisions, e cada Division tem um nome e uma coleção de Teams. Cada Team um tem um nome de equipe.

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

Veja a seguir uma captura de tela do exemplo. O DivisionsListBox rastreia automaticamente as seleções no LeaguesListBox e exibe os dados correspondentes. O TeamsListBox rastreia as seleções nos outros dois ListBox controles.

Captura de tela que mostra um exemplo de cenário de mestre-detalhe.

Os dois itens a serem notados neste exemplo são:

  1. Os três ListBox controles se associam à mesma origem. Defina a propriedade de vinculação da Path para especificar qual nível de dados deseja que o ListBox exiba.

  2. Você deve definir a IsSynchronizedWithCurrentItem propriedade para true nos ListBox controles da qual você está acompanhando a seleção. Definir essa propriedade garante que o item selecionado esteja sempre definido como o CurrentItem. Como alternativa, se o ListBox receber dados de um CollectionViewSource, a seleção e a moeda serão sincronizadas automaticamente.

A técnica é ligeiramente diferente quando você está usando dados XML. Para obter um exemplo, consulte Usar o padrão Master-Detail com dados XML hierárquicos.

Consulte também