Vorgehensweise: Binden an eine Sammlung und Anzeigen von Informationen auf Grundlage der AuswahlHow to: Bind to a Collection and Display Information Based on Selection

In einem einfachen Master / Detail-Szenario haben Sie ein datengebundenes ItemsControl wie z. B. eine ListBox.In a simple master-detail scenario, you have a data-bound ItemsControl such as a ListBox. Auf Grundlage der Benutzerauswahl, zeigen Sie weitere Informationen zum ausgewählten Element.Based on user selection, you display more information about the selected item. Dieses Beispiel zeigt, wie Sie dieses Szenario zu implementieren.This example shows how to implement this scenario.

BeispielExample

In diesem Beispiel People ist ein ObservableCollection<T> von Person Klassen.In this example, People is an ObservableCollection<T> of Person classes. Dies Person -Klasse enthält drei Eigenschaften: FirstName, LastName, und HomeTown, alle Typ string.This Person class contains three properties: FirstName, LastName, and HomeTown, all of type string.

<Window x:Class="SDKSample.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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>

Die ContentControl verwendet die folgenden DataTemplate , definiert, wie die Informationen des eine Person wird angezeigt:The ContentControl uses the following DataTemplate that defines how the information of a Person is presented:

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

Folgendes ist ein Screenshot der Ausgabe des Beispiels.The following is a screenshot of what the example produces. Die ContentControl zeigt die anderen Eigenschaften der ausgewählten Person.The ContentControl shows the other properties of the person selected.

Binden an eine AuflistungBinding to a collection

Die beiden in diesem Beispiel sind zu beachten:The two things to notice in this example are:

  1. Die ListBox und ContentControl an dieselbe Quelle binden.The ListBox and the ContentControl bind to the same source. Die Path Eigenschaften beide Bindungen sind nicht angegeben werden, da beide Steuerelemente an das gesamte Objekt gebunden werden.The Path properties of both bindings are not specified because both controls are binding to the entire collection object.

  2. Sie müssen festlegen, die IsSynchronizedWithCurrentItem Eigenschaft true damit dies funktioniert.You must set the IsSynchronizedWithCurrentItem property to true for this to work. Durch Festlegen dieser Eigenschaft wird sichergestellt, dass das ausgewählte Element immer, als festgelegt ist die CurrentItem.Setting this property ensures that the selected item is always set as the CurrentItem. Auch wenn die ListBox ruft es die Daten aus einer CollectionViewSource, diese Auswahl und Aktualität wird automatisch synchronisiert.Alternatively, if the ListBox gets it data from a CollectionViewSource, it synchronizes selection and currency automatically.

Beachten Sie, dass die Person -Klasse überschreibt die ToString Methode wie folgt.Note that the Person class overrides the ToString method the following way. In der Standardeinstellung die ListBox Aufrufe ToString und eine Zeichenfolgendarstellung der einzelnen Objekte in der gebundenen Auflistung angezeigt.By default, the ListBox calls ToString and displays a string representation of each object in the bound collection. Deshalb jedes Person wird als einen Vornamen in der ListBox.That is why each Person appears as a first name in the ListBox.

public override string ToString()
{
    return firstname.ToString();
}
Public Overrides Function ToString() As String
    Return Me._firstname.ToString
End Function

Siehe auchSee also