Procedura: eseguire l'associazione di un insieme e visualizzare informazioni in base alla selezione effettuata
Aggiornamento: novembre 2007
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.
Esempio
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="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>
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.
Si notino i due aspetti dell'esempio riportati di seguito:
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.
È 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 nell'insieme associato. Questo è il motivo per cui ogni oggetto Person viene visualizzato come nome nel controllo ListBox.
Public Overrides Function ToString() As String
Return Me._firstname.ToString
End Function
public override string ToString()
{
return firstname.ToString();
}
Per l'esempio completo, vedere Esempio di associazione a un insieme.
Vedere anche
Attività
Procedura: utilizzare il modello Master-Details con dati gerarchici
Procedura: utilizzare il modello Master-Details con dati XML gerarchici
Concetti
Cenni preliminari sull'associazione dati
Cenni preliminari sui modelli di dati