Freigeben über


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.

Binden an eine Auflistung

Zwei Punkte sind in diesem Beispiel zu beachten:

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

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

Konzepte

Übersicht über Datenbindung

Übersicht über Datenvorlagen

Weitere Ressourcen

Gewusst-wie-Themen zur Datenbindung