Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Procedura: eseguire l'associazione di una raccolta e visualizzare informazioni in base alla selezione effettuata

In un semplice scenario Master-Details si dispone di un elemento ItemsControl associato ai dati come ListBox. In base alla selezione dell'utente vengono visualizzate più informazioni relative all'elemento selezionato. In questo esempio viene illustrato come implementare tale scenario.

In questo esempio People è un oggetto ObservableCollection<T> delle classi Person. Questa classe Person contiene tre proprietà, FirstName, LastName e HomeTown, tutte di tipo 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>


ContentControl utilizza l'oggetto DataTemplate riportato di seguito che definisce il modo in cui vengono presentate le informazioni di Person:


<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 è disponibile una schermata del risultato dell'esempio. ContentControl mostra le altre proprietà della persona selezionata.

Binding to a Collection

Si notino i due aspetti dell'esempio riportati di seguito:

  1. ListBox e ContentControl sono associati alla stessa origine. Le proprietà Path di entrambe le associazioni non sono specificate perché entrambi i controlli vengono associati all'intero oggetto Collection.

  2. È necessario impostare la proprietà IsSynchronizedWithCurrentItem su true perché funzioni. L'impostazione di questa proprietà assicura che l'elemento selezionato sia sempre impostato come CurrentItem. In alternativa, se ListBox ottiene i dati da un oggetto CollectionViewSource, la selezione e la valuta vengono sincronizzate automaticamente.

L'override del metodo ToString viene eseguito dalla classe Person nel modo seguente. Per impostazione predefinita, ListBox chiama ToString e visualizza una rappresentazione di stringa di ogni oggetto nella raccolta associata. Questo è il motivo per cui ogni oggetto Person viene visualizzato come nome nel controllo ListBox.


public override string ToString()
{
    return firstname.ToString();
}


Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft