Jak użyć wzorca szczegółowego z danymi hierarchicznymi

W tym przykładzie pokazano, jak zaimplementować scenariusz master-detail.

Przykład

W tym przykładzie LeagueList jest to kolekcja Leagues. Każda League z nich ma Name kolekcję Divisions, a każda z nich Division ma nazwę i kolekcję Teams. Każda z nich Team ma nazwę zespołu.

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

Poniżej przedstawiono zrzut ekranu przedstawiający przykład. Funkcja DivisionsListBox automatycznie śledzi wybrane opcje w obiekcie LeaguesListBox i wyświetla odpowiednie dane. Ścieżki TeamsListBox zaznaczenia w dwóch ListBox pozostałych kontrolkach.

Screenshot that shows a Master-detail scenario example.

Dwie kwestie, które należy zauważyć w tym przykładzie, to:

  1. Trzy ListBox kontrolki są powiązane z tym samym źródłem. Należy ustawić Path właściwość powiązania, aby określić poziom danych, które mają ListBox być wyświetlane.

  2. Należy ustawić IsSynchronizedWithCurrentItem właściwość na true na kontrolki ListBox , których zaznaczenie śledzisz. Ustawienie tej właściwości gwarantuje, że wybrany element jest zawsze ustawiony jako CurrentItem. Alternatywnie, jeśli ListBox pobiera dane z CollectionViewSourceelementu , automatycznie synchronizuje wybór i walutę.

Technika jest nieco inna, gdy używasz danych XML. Aby zapoznać się z przykładem, zobacz Use the Master-Detail Pattern with Hierarchical XML Data (Używanie wzorca szczegółów z hierarchicznymi danymi XML).

Zobacz też