方法 : 階層データでマスター詳細パターンを使用する

この例では、マスター詳細シナリオを実装する方法を示します。

使用例

この例では、LeagueList は Leagues のコレクションです。 League にはそれぞれ Divisions のコレクションと Name があり、Division にはそれぞれ Teams のコレクションと名前があります。 Team にはそれぞれチーム名があります。

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

この例のスクリーンショットを次に示します。 Divisions ListBox は、Leagues ListBox での選択を自動的に追跡し、対応するデータを表示します。 Teams ListBox は、他の 2 つの ListBox コントロールでの選択を追跡します。

マスター詳細のサンプル

この例では、次の 2 つの点に注意する必要があります。

  1. 3 つの ListBox コントロールは、同じソースにバインドしています。 ListBox に表示するデータのレベルを指定するには、バインディングの Path プロパティを設定します。

  2. 選択を追跡する ListBox コントロールでは、IsSynchronizedWithCurrentItem プロパティを true に設定する必要があります。 このプロパティを設定すると、選択されている項目は常に CurrentItem として設定されます。 または、ListBoxCollectionViewSource からデータを取得する場合は、選択と現在の項目が自動的に同期されます。

XML データを使用する場合は、方法が若干異なります。 例については、「方法 : 階層 XML データでマスター詳細パターンを使用する」を参照してください。

参照

処理手順

方法 : コレクションにバインドして選択に基づく情報を表示する

参照

HierarchicalDataTemplate

概念

データ バインディングの概要

データ テンプレートの概要

その他の技術情報

データ バインディングに関する「方法」トピック