如何:对分层数据使用主-从模式

此示例演示如何实现主/从方案。

示例

在本示例中,LeagueList 是 Leagues 的集合。 每个 League 都有一个 Name,并且具有一个 Divisions 集合;每个 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 可跟踪其他两个 ListBox 控件中的选定内容。

主-详细信息示例

此示例中需要注意两点:

  1. 这三个 ListBox 控件都绑定到同一个源。 设置绑定的 Path 属性以指定您希望 ListBox 显示哪个级别的数据。

  2. 必须将您正在跟踪其选定内容的 ListBox 控件上的 IsSynchronizedWithCurrentItem 属性设置为 true。 设置此属性可以确保选定项始终设置为 CurrentItem。 或者,如果 ListBoxCollectionViewSource 获取数据,则它将自动同步选定内容和当前内容。

如果使用 XML 数据,则方式略有不同。 有关示例,请参见如何:对分层 XML 数据使用主-从模式

请参见

任务

如何:绑定到集合并基于选择显示信息

参考

HierarchicalDataTemplate

概念

数据绑定概述

数据模板化概述

其他资源

数据绑定帮助主题