Практическое руководство. Использование шаблона "основной-подчиненный" с иерархическими данными
В этом примере показано, как реализовать сценарий master-detail (сценарий основной информации и подробных сведений).
Пример
В этом примере LeagueList
представляет собой коллекцию Leagues
. Каждый League
имеет Name
и коллекцию Divisions
, и каждый Division
имеет имя и коллекцию Teams
. У каждого Team
есть имя команды.
<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>
Ниже приведен снимок экрана примера. Автоматически Divisions
ListBox отслеживает выборы в списке Leagues
ListBox и отображает соответствующие данные. Выбранные Teams
ListBox элементы управления отслеживают два других ListBox элемента управления.
Ниже указаны два аспекта, на которые следует обратить внимание в этом примере:
Три элемента управления ListBox привязаны к одному и тому же источнику. Вы задаете свойство Path привязки, чтобы указать, какой уровень данных должен отобразить ListBox.
Вы должны задать свойство IsSynchronizedWithCurrentItem для
true
в элементах управления ListBox, для которых выполняется отслеживание выделения. Задание значения этого свойства гарантирует, что выбранный элемент всегда задан как CurrentItem. Как вариант, если ListBox получает данные из CollectionViewSource, он автоматически синхронизирует выделение и валюту.
Этот метод немного отличается при использовании XML-данных. Пример см. в руководстве Использование шаблона Master-Detail с иерархическими данными XML.
См. также
.NET Desktop feedback