Panoramica sul controllo ListView

Il ListView controllo fornisce l'infrastruttura per visualizzare un set di elementi di dati in usando un layout o una visualizzazione diversa. Ad esempio, un utente può scegliere di visualizzare gli elementi dei dati in una tabella e anche di ordinarne le colonne.

Nota

I tipi a cui si fa riferimento in questo articolo sono disponibili nella sezione Riferimento al codice .

Definizione del controllo ListView

ListView deriva da ListBox. In genere, i relativi elementi sono membri di una raccolta dati e sono rappresentati come ListViewItem oggetti . Un ListViewItem oggetto è e ContentControl può contenere solo un singolo elemento figlio. Tale elemento figlio può tuttavia 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 ListView controllo, impostare la View proprietà . 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 oggetto per un ListView controllo 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 illustra come vengono visualizzati i dati per l'esempio precedente.

Screenshot that shows a ListView with GridView output.

È possibile creare una modalità di visualizzazione personalizzata definendo una classe che eredita dalla ViewBase classe . La ViewBase classe fornisce l'infrastruttura necessaria per creare una visualizzazione personalizzata. Per altre informazioni su come creare una visualizzazione personalizzata, vedere Creare una modalità di visualizzazione personalizzata per un controllo ListView.

Associazione di dati a un controllo ListView

Utilizzare le Items proprietà e ItemsSource per specificare gli elementi per un ListView controllo . Nell'esempio seguente la ItemsSource proprietà viene impostata su una raccolta di dati denominata EmployeeInfoDataSource.

<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">

In un GridViewoggetto , GridViewColumn gli oggetti vengono associati ai campi dati specificati. Nell'esempio seguente un GridViewColumn oggetto viene associato a un campo dati specificando un Binding oggetto per la DisplayMemberBinding proprietà .

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 come Binding parte di una DataTemplate definizione utilizzata per applicare uno stile alle celle in una colonna. Nell'esempio seguente l'oggetto DataTemplate identificato con un ResourceKey oggetto imposta l'oggetto Binding per un oggetto GridViewColumn. Si noti che questo esempio non definisce perché DisplayMemberBinding in questo modo 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}"/>

Applicazione di uno stile a un controllo ListView che implementa un oggetto GridView

Il ListView controllo 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:

Per evitare problemi di allineamento tra le celle di un GridViewoggetto , non utilizzare per ItemContainerStyle impostare le proprietà o aggiungere contenuto che influisce sulla larghezza di un elemento in un oggetto ListView. Ad esempio, un problema di allineamento può verificarsi quando si imposta la Margin proprietà in ItemContainerStyle. Per specificare le proprietà o definire il contenuto che influisce sulla larghezza degli elementi in un GridViewoggetto , utilizzare le proprietà della GridView classe e le relative classi correlate, ad esempio GridViewColumn.

Per altre informazioni su come usare GridView e sulle relative classi di supporto, vedere Panoramica di GridView.

Se si definisce un ItemContainerStyle oggetto per un ListView controllo e si definisce anche un ItemTemplateoggetto , è necessario includere un ContentPresenter oggetto nello stile affinché funzioni ItemTemplate correttamente.

Non utilizzare le proprietà e VerticalContentAlignment per ListView il HorizontalContentAlignment contenuto visualizzato da un oggetto GridView. Per specificare l'allineamento del contenuto in una colonna di un GridViewoggetto , definire un oggetto CellTemplate.

Condivisione della stessa modalità di visualizzazione

Due ListView controlli non possono condividere contemporaneamente la stessa modalità di visualizzazione. Se si tenta di usare la stessa modalità di visualizzazione con più controlli ListView , si verifica un'eccezione.

Per specificare una modalità di visualizzazione che può essere usata simultaneamente da più di un ListViewoggetto , usare modelli o stili.

Creazione di una modalità di visualizzazione personalizzata

Le visualizzazioni personalizzate come GridView sono derivate dalla ViewBase classe astratta, che fornisce gli strumenti per visualizzare gli elementi di dati rappresentati come ListViewItem oggetti.

Informazioni di riferimento sul codice

In questo articolo viene fatto riferimento agli oggetti seguenti:

  • EmployeeInfoDataSource raccolta dati. Se si usa Visual Basic .NET, l'elemento Window 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 , utilizzata come tipo per la EmployeeInfoDataSource raccolta di dati.

    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
    

Vedi anche