Gewusst wie: Binden an eine Auflistung 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 verfügen Sie über eine Daten gebundene ItemsControl z. b. eine ListBox.In a simple master-detail scenario, you have a data-bound ItemsControl such as a ListBox. Basierend auf der Benutzer Auswahl zeigen Sie weitere Informationen über das ausgewählte Element an.Based on user selection, you display more information about the selected item. In diesem Beispiel wird gezeigt, wie dieses Szenario implementiert wird.This example shows how to implement this scenario.

BeispielExample

In diesem Beispiel ist People ein ObservableCollection<T> von Person Klassen.In this example, People is an ObservableCollection<T> of Person classes. Diese Person Klasse enthält drei Eigenschaften: FirstName, LastNameund HomeTown, alle vom 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>

Der ContentControl verwendet den folgenden DataTemplate, der definiert, wie die Informationen eines Person dargestellt werden: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>

Im folgenden finden Sie einen Screenshot der Ergebnisse des Beispiels.The following is a screenshot of what the example produces. In der ContentControl werden die anderen Eigenschaften der ausgewählten Person angezeigt.The ContentControl shows the other properties of the person selected.

Binden an eine SammlungBinding to a collection

In diesem Beispiel sind die folgenden zwei Punkte zu beachten:The two things to notice in this example are:

  1. Der ListBox und das ContentControl an dieselbe Quelle gebunden.The ListBox and the ContentControl bind to the same source. Die Path Eigenschaften beider Bindungen werden nicht angegeben, weil beide Steuerelemente an das gesamte Sammlungsobjekt 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 die IsSynchronizedWithCurrentItem-Eigenschaft auf true festlegen, 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 CurrentItemfestgelegt ist.Setting this property ensures that the selected item is always set as the CurrentItem. Wenn das ListBox die Daten aus einer CollectionViewSourceabruft, werden die Auswahl und die Währung Alternativ automatisch synchronisiert.Alternatively, if the ListBox gets it data from a CollectionViewSource, it synchronizes selection and currency automatically.

Beachten Sie, dass die Person-Klasse die ToString-Methode wie folgt überschreibt.Note that the Person class overrides the ToString method the following way. Standardmäßig ruft der ListBox ToString auf und zeigt eine Zeichen folgen Darstellung jedes Objekts in der gebundenen Auflistung an.By default, the ListBox calls ToString and displays a string representation of each object in the bound collection. Aus diesem Grund wird jede Person als Vorname in der ListBoxangezeigt.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