Como: Use the Master-Detail Pattern with Hierarchical Data

Este exemplo mostra como implementar o cenário mestre-detalhes.

Exemplo

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

<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 seguir vamos a tela do exemplo. A ListBox Divisions automaticamente controla as seleções na ListBox Leagues e exibe os dados correspondentes. A ListBox Teams controla as seleções nos outros dois controles ListBox.

Exemplo de detalhes mestres

As duas coisas a observar no exemplo são:

  1. Os três controles ListBox são associados à mesma fonte. Você define a propriedade Path da associação para especificar que nível de dados você deseja que a ListBox mostre.

  2. Você deve definir a propriedade IsSynchronizedWithCurrentItem como true nos controles ListBox nos quais você esteja controlando a seleção. A definição dessa propriedade garante que o item selecionado é sempre definido como CurrentItem. Como alternativa, se o ListBox obtém seus dados de um CollectionViewSource, ele sincroniza automaticamente a seleção e moeda.

For the complete sample, see Cenário de Master-Detail usando o exemplo do ObjectDataProvider. A técnica é um pouco diferente quando você estiver usando dados XML. Para um exemplo, consulte Como: Use the Master-Detail Pattern with Hierarchical XML Data.

Consulte também

Tarefas

Como: Bind to a Collection and Display Information Based on Selection

Conceitos

Revisão de Associação de Dados

Visão geral sobre Templating de dados

Referência

HierarchicalDataTemplate

Outros recursos

Exemplos de ligação de dados

Data Binding How-to Topics