Como usar o padrão de detalhes mestre com dados hierárquicosHow to: Use the Master-Detail Pattern with Hierarchical Data

Este exemplo mostra como implementar o cenário de detalhes mestre.This example shows how to implement the master-detail scenario.

ExemploExample

Neste exemplo, LeagueList é uma coleção de Leagues.In this example, LeagueList is a collection of Leagues. Cada League tem um Name e uma coleção de Divisions e cada Division tem um nome e uma coleção de Teams.Each League has a Name and a collection of Divisions, and each Division has a name and a collection of Teams. Cada Team tem um nome de equipe.Each Team has a team name.

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

Segue uma captura de tela do exemplo.The following is a screenshot of the example. O Divisions ListBox rastreia seleções automaticamente no Leagues ListBox e exibe os dados correspondentes.The Divisions ListBox automatically tracks selections in the Leagues ListBox and display the corresponding data. O Teams ListBox controla seleções nos outros dois controles de ListBox.The Teams ListBox tracks selections in the other two ListBox controls.

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

As duas coisas a se observar neste exemplo são:The two things to notice in this example are:

  1. Os três controles de ListBox se associam à mesma fonte.The three ListBox controls bind to the same source. Defina a propriedade Path da Associação para especificar qual nível de dados você deseja que o ListBox exiba.You set the Path property of the binding to specify which level of data you want the ListBox to display.

  2. Você deve definir a propriedade IsSynchronizedWithCurrentItem como true nos controles de ListBox dos quais a seleção está acompanhando.You must set the IsSynchronizedWithCurrentItem property to true on the ListBox controls of which the selection you are tracking. Definir essa propriedade garante que o item selecionado sempre seja definido como o CurrentItem.Setting this property ensures that the selected item is always set as the CurrentItem. Como alternativa, se o ListBox obtém dados de um CollectionViewSource, ele sincroniza a seleção e a moeda automaticamente.Alternatively, if the ListBox gets it data from a CollectionViewSource, it synchronizes selection and currency automatically.

A técnica é ligeiramente diferente quando você está usando dados XML.The technique is slightly different when you are using XML data. Para ver um exemplo, confira Usar o padrão de detalhes mestre com os dados XML hierárquicos.For an example, see Use the Master-Detail Pattern with Hierarchical XML Data.

Consulte tambémSee also