Panoramica di ListView
Il controllo ListView fornisce l'infrastruttura per visualizzare un set di elementi di dati utilizzando un layout o una visualizzazione diversa. Ad esempio, un utente può voler visualizzare gli elementi di dati in una tabella e anche ordinarne le colonne.
Nota
I tipi a cui si fa riferimento in questo articolo sono disponibili nella sezione riferimento al codice
Che cos'è un ListView?
Il ListView deriva da ListBox. In genere, i relativi elementi sono membri di una raccolta dati e sono rappresentati come oggetti ListViewItem. Un ListViewItem è un ContentControl e può contenere solo un singolo elemento figlio. Tuttavia, tale elemento figlio può essere qualsiasi elemento visivo.
Definizione di una modalità di visualizzazione per un controllo ListView
Per specificare una modalità di visualizzazione per il contenuto di un controllo ListView, impostare la proprietà View. Una modalità di visualizzazione fornita da Windows Presentation Foundation (WPF) è GridView, che visualizza una raccolta di elementi di dati in una tabella con colonne personalizzabili.
Nell'esempio seguente viene illustrato come definire un GridView per un controllo ListView che visualizza le informazioni sui dipendenti.
<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Employee Information">
<GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>
<GridViewColumn DisplayMemberBinding="{Binding Path=LastName}" Width="100">
<GridViewColumnHeader>Last Name
<GridViewColumnHeader.ContextMenu>
<ContextMenu MenuItem.Click="LastNameCM_Click" Name="LastNameCM">
<MenuItem Header="Ascending" />
<MenuItem Header="Descending" />
</ContextMenu>
</GridViewColumnHeader.ContextMenu>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=EmployeeNumber}" Header="Employee No." Width="100"/>
</GridView>
</ListView.View>
</ListView>
La figura seguente mostra come vengono visualizzati i dati per l'esempio precedente.
È possibile creare una modalità di visualizzazione personalizzata definendo una classe che eredita dalla classe ViewBase. La classe ViewBase fornisce l'infrastruttura necessaria per creare una visualizzazione personalizzata. Per ulteriori informazioni su come creare una vista personalizzata, vedere Creare una modalità di visualizzazione personalizzata per un controllo ListView.
Collegamento dei dati a un elemento ListView
Utilizzare le proprietà Items e ItemsSource per specificare gli elementi per un controllo ListView. Nell'esempio seguente la proprietà ItemsSource viene impostata su una raccolta di dati denominata EmployeeInfoDataSource
.
<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">
In un GridView, gli oggetti GridViewColumn si legano ai campi dati specificati. Nell'esempio seguente viene associato un oggetto GridViewColumn a un campo dati specificando un Binding per la proprietà DisplayMemberBinding.
GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
Dim gvc1 As New GridViewColumn()
gvc1.DisplayMemberBinding = New Binding("FirstName")
gvc1.Header = "FirstName"
gvc1.Width = 100
<GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="100"/>
È anche possibile specificare un Binding come parte di una definizione di DataTemplate utilizzata per applicare uno stile alle celle in una colonna. Nell'esempio seguente, il DataTemplate identificato con il ResourceKey imposta il Binding per un GridViewColumn. Si noti che questo esempio non definisce il DisplayMemberBinding perché facendo così ha la precedenza su CellTemplate.
<DataTemplate x:Key="myCellTemplateMonth">
<DockPanel>
<TextBlock Foreground="DarkBlue" HorizontalAlignment="Center">
<TextBlock.Text>
<Binding Path="Month"/>
</TextBlock.Text>
</TextBlock>
</DockPanel>
</DataTemplate>
<GridViewColumn Header="Month" Width="80"
CellTemplate="{StaticResource myCellTemplateMonth}"/>
Personalizzare un ListView che implementa un GridView
Il controllo ListView contiene ListViewItem oggetti che rappresentano gli elementi di dati visualizzati. È possibile usare le proprietà seguenti per definire il contenuto e lo stile degli elementi di dati:
Nel controllo ListView usare le proprietà ItemTemplate, ItemTemplateSelectore ItemContainerStyle .
Nel controllo ListViewItem utilizzare le proprietà ContentTemplate e ContentTemplateSelector.
Per evitare problemi di allineamento tra le celle di un GridView, non utilizzare il ItemContainerStyle per impostare le proprietà o aggiungere contenuto che influisce sulla larghezza di un elemento in un ListView. Ad esempio, un problema di allineamento può verificarsi quando si imposta la proprietà Margin nel ItemContainerStyle. Per specificare le proprietà o definire il contenuto che influisce sulla larghezza degli elementi in un GridView, utilizzare le proprietà della classe GridView e le relative classi correlate, ad esempio GridViewColumn.
Per altre informazioni su come usare GridView e le classi di supporto associate, vedere Panoramica di GridView.
Se si definisce un ItemContainerStyle per un controllo ListView e si definisce anche un ItemTemplate, è necessario includere un ContentPresenter nello stile affinché il ItemTemplate funzioni correttamente.
Non utilizzare le proprietà HorizontalContentAlignment e VerticalContentAlignment per il contenuto ListView visualizzato da un GridView. Per specificare l'allineamento del contenuto in una colonna di un GridView, è necessario definire un CellTemplate.
Condivisione della stessa modalità di visualizzazione
Due controlli ListView non possono condividere contemporaneamente la stessa modalità di visualizzazione. Se si tenta di usare la stessa modalità di visualizzazione con più di un controllo ListView, si verifica un'eccezione.
Per specificare una modalità di visualizzazione che può essere usata simultaneamente da più ListView, usare modelli o stili.
Creazione di una modalità visualizzazione personalizzata
Le visualizzazioni personalizzate come GridView derivano dalla classe astratta ViewBase, che fornisce gli strumenti per visualizzare gli elementi di dati rappresentati come oggetti ListViewItem.
Riferimento al codice
In questo articolo viene fatto riferimento agli oggetti seguenti:
EmployeeInfoDataSource
raccolta dati. Se si usa Visual Basic .NET, l'elementoWindow
viene dichiarato leggermente diverso da quello visualizzato nel codice di esempio:<Window x:Class="SDKSample.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="OnLoad" xmlns:ds="clr-namespace:SDKSample"> <Window.Resources> <ObjectDataProvider x:Key="EmployeeInfoDataSource" ObjectType="{x:Type ds:myEmployees}" /> </Window.Resources>
EmployeeInfo
classe, usata come tipo per la raccolta dati di tipoEmployeeInfoDataSource
.public class EmployeeInfo { private string _firstName; private string _lastName; private string _employeeNumber; public string FirstName { get {return _firstName;} set {_firstName = value;} } public string LastName { get {return _lastName;} set {_lastName = value;} } public string EmployeeNumber { get {return _employeeNumber;} set {_employeeNumber = value;} } public EmployeeInfo(string firstname, string lastname, string empnumber) { _firstName = firstname; _lastName = lastname; _employeeNumber = empnumber; } }
Public Class EmployeeInfo Private _firstName As String Private _lastName As String Private _employeeNumber As String Public Property FirstName() As String Get Return _firstName End Get Set(ByVal value As String) _firstName = value End Set End Property Public Property LastName() As String Get Return _lastName End Get Set(ByVal value As String) _lastName = value End Set End Property Public Property EmployeeNumber() As String Get Return _employeeNumber End Get Set(ByVal value As String) _employeeNumber = value End Set End Property Public Sub New(ByVal firstname As String, ByVal lastname As String, ByVal empnumber As String) _firstName = firstname _lastName = lastname _employeeNumber = empnumber End Sub End Class
Vedere anche
- GridView
- ListView
- ListViewItem
- Binding
- Panoramica di GridView
- Argomenti delle istruzioni
- controlli
.NET Desktop feedback