Procedura: eseguire l'associazione di una raccolta e visualizzare informazioni in base alla selezione effettuataHow to: Bind to a Collection and Display Information Based on Selection

In un semplice scenario master-Details, è necessario un controllo con associazione a dati ItemsControl , ad esempio un ListBox.In a simple master-detail scenario, you have a data-bound ItemsControl such as a ListBox. In base alla selezione utente, visualizzare ulteriori informazioni sull'elemento selezionato.Based on user selection, you display more information about the selected item. In questo esempio viene illustrato come implementare questo scenario.This example shows how to implement this scenario.

EsempioExample

In questo esempio, People è un ObservableCollection<T> di Person classi.In this example, People is an ObservableCollection<T> of Person classes. Questo Person classe contiene tre proprietà: FirstName, LastName, e HomeTown, tutti di tipo 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>

Il ContentControl utilizza il seguente DataTemplate che definisce come le informazioni di un Person viene presentato: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>

Di seguito è riportata una schermata dell'esempio viene generato.The following is a screenshot of what the example produces. Il ContentControl Mostra le altre proprietà della persona selezionata.The ContentControl shows the other properties of the person selected.

Associazione a una raccoltaBinding to a collection

I due elementi per rilevare in questo esempio sono:The two things to notice in this example are:

  1. Il ListBox e ContentControl associare alla stessa origine.The ListBox and the ContentControl bind to the same source. Il Path le proprietà di entrambe le associazioni non sono specificate perché entrambi i controlli vengono associati all'oggetto intera raccolta.The Path properties of both bindings are not specified because both controls are binding to the entire collection object.

  2. È necessario impostare il IsSynchronizedWithCurrentItem proprietà true per il funzionamento.You must set the IsSynchronizedWithCurrentItem property to true for this to work. L'impostazione di questa proprietà garantisce che l'elemento selezionato è sempre impostato come il CurrentItem.Setting this property ensures that the selected item is always set as the CurrentItem. In alternativa, se il ListBox Ottiene i dati da un CollectionViewSource, la selezione e valuta sincronizzate automaticamente.Alternatively, if the ListBox gets it data from a CollectionViewSource, it synchronizes selection and currency automatically.

Si noti che il Person classe esegue l'override di ToString metodo modo seguente.Note that the Person class overrides the ToString method the following way. Per impostazione predefinita, il ListBox chiamate ToString e visualizza una rappresentazione di stringa di ogni oggetto nella raccolta associata.By default, the ListBox calls ToString and displays a string representation of each object in the bound collection. Ecco perché ogni Person viene visualizzato come un nome nel 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

Vedere ancheSee Also

Usare il modello Master-Details con dati gerarchiciUse the Master-Detail Pattern with Hierarchical Data
Usare il modello Master-Details con dati XML gerarchiciUse the Master-Detail Pattern with Hierarchical XML Data
Panoramica sul data bindingData Binding Overview
Panoramica sui modelli di datiData Templating Overview
Procedure relative alle proprietàHow-to Topics