如何:对分层数据使用主-从模式
更新:2007 年 11 月
此示例演示如何实现主/从方案。
示例
在本示例中,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 控件中的选定内容。
此示例中需要注意两点:
这三个 ListBox 控件都绑定到同一个源。设置绑定的 Path 属性以指定您希望 ListBox 显示哪个级别的数据。
必须将您正在跟踪其选定内容的 ListBox 控件上的 IsSynchronizedWithCurrentItem 属性设置为 true。设置此属性可以确保选定项始终设置为 CurrentItem。或者,如果 ListBox 从 CollectionViewSource 获取数据,则它将自动同步选定内容和当前内容。
有关完整示例,请参见 使用 ObjectDataProvider 的主从方案示例。如果您使用的是 XML 数据,则该技术会略有不同。有关示例,请参见 如何:对分层 XML 数据使用主-从模式。