Gewusst wie: Binden an eine Auflistung und Anzeigen von Informationen auf Grundlage der Auswahl
In einem einfachen Master/Detail-Szenario haben Sie ein datengebundenes ItemsControl-Element, z. B. ein ListBox. Auf Grundlage der Benutzerauswahl zeigen Sie weitere Informationen über das ausgewählte Element an. In diesem Beispiel wird gezeigt, wie dieses Szenario implementiert wird.
Beispiel
In diesem Beispiel ist People eine ObservableCollection<T> von Person-Klassen. Diese Person-Klasse enthält drei Eigenschaften: FirstName, LastName und HomeTown, alle vom Typ string.
<Window x:Class="SDKSample.Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SDKSample"
Title="Binding to a Collection"
SizeToContent="WidthAndHeight">
<Window.Resources>
<local:People x:Key="MyFriends"/>
...
</Window.Resources>
<StackPanel>
<TextBlock FontFamily="Verdana" FontSize="11"
Margin="5,15,0,10" FontWeight="Bold">My Friends:</TextBlock>
<ListBox Width="200" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource MyFriends}}"/>
<TextBlock FontFamily="Verdana" FontSize="11"
Margin="5,15,0,5" FontWeight="Bold">Information:</TextBlock>
<ContentControl Content="{Binding Source={StaticResource MyFriends}}"
ContentTemplate="{StaticResource DetailTemplate}"/>
</StackPanel>
</Window>
Das ContentControl verwendet die folgende DataTemplate, die definiert, wie die Informationen einer Person präsentiert werden:
<DataTemplate x:Key="DetailTemplate">
<Border Width="300" Height="100" Margin="20"
BorderBrush="Aqua" BorderThickness="1" Padding="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="First Name:"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FirstName}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name:"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=LastName}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Home Town:"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=HomeTown}"/>
</Grid>
</Border>
</DataTemplate>
Im Folgenden finden Sie eine Bildschirmaufnahme der Ausgabe des Beispiels. Das ContentControl-Element zeigt die anderen Eigenschaften der ausgewählten Person.
Zwei Punkte sind in diesem Beispiel zu beachten:
Das ListBox und das ContentControl werden an dieselbe Quelle gebunden. Die Path-Eigenschaften beider Bindungen sind nicht angegeben, da beide Steuerelemente an das gesamte Auflistungsobjekt gebunden werden.
Damit dies funktioniert, muss die IsSynchronizedWithCurrentItem-Eigenschaft auf true festgelegt werden. Durch Festlegen dieser Eigenschaft wird sichergestellt, dass das ausgewählte Element immer als CurrentItem festgelegt wird. Wenn hingegen das ListBox die Daten von CollectionViewSource abruft, werden Auswahl und Währung automatisch synchronisiert.
Beachten Sie, dass die Person-Klasse die ToString-Methode auf folgende Weise überschreibt. Standardmäßig ruft das ListBox ToString auf und zeigt eine Zeichenfolgendarstellung jedes Objekts in der gebundenen Auflistung an. Aus diesem Grund wird jede Person im ListBox als Vorname angezeigt.
Public Overrides Function ToString() As String
Return Me._firstname.ToString
End Function
public override string ToString()
{
return firstname.ToString();
}
Siehe auch
Aufgaben
Gewusst wie: Verwenden des Master/Detail-Musters mit hierarchischen Daten
Gewusst wie: Verwenden des Master/Detail-Musters mit hierarchischen XML-Daten