Vue d’ensemble de ListView

Le ListView contrôle fournit l’infrastructure pour afficher un ensemble d’éléments de données à l’aide d’une disposition ou d’une vue différente. Par exemple, un utilisateur peut souhaiter afficher des éléments de données dans un tableau et en trier les colonnes.

Remarque

Les types référencés dans cet article sont disponibles dans la section Référence du code.

Qu’est qu’un contrôle ListView ?

ListView dérive de ListBox. En règle générale, ses éléments sont membres d’une collection de données et sont représentés en tant qu’objets ListViewItem . A ListViewItem est un ContentControl et ne peut contenir qu’un seul élément enfant. Toutefois, cet élément enfant peut être n’importe quel élément visuel.

Définition d’un mode d’affichage pour un ListView

Pour spécifier un mode d’affichage pour le contenu d’un ListView contrôle, vous définissez la View propriété. Un mode d’affichage fourni par Windows Presentation Foundation (WPF) est GridView, qui affiche une collection d’éléments de données dans une table qui a des colonnes personnalisables.

L’exemple suivant montre comment définir un GridViewListView contrôle qui affiche des informations sur les employés.


<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>

L’illustration suivante montre le tableau créé par l’exemple précédent.

Screenshot that shows a ListView with GridView output.

Vous pouvez créer un mode d’affichage personnalisé en définissant une classe qui hérite de la ViewBase classe. La ViewBase classe fournit l’infrastructure dont vous avez besoin pour créer une vue personnalisée. Pour plus d’informations sur la création d’un affichage personnalisé, consultez la page Créer un mode d’affichage personnalisé pour un ListView.

Liaison des données à un contrôle ListView

Utilisez les propriétés et ItemsSource les Items propriétés pour spécifier des éléments pour un ListView contrôle. L’exemple suivant définit la ItemsSource propriété sur une collection de données appelée EmployeeInfoDataSource.

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

Dans un GridViewobjet , GridViewColumn les objets sont liés à des champs de données spécifiés. L’exemple suivant lie un GridViewColumn objet à un champ de données en spécifiant une BindingDisplayMemberBinding propriété.

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"/>

Vous pouvez également spécifier une Binding définition DataTemplate que vous utilisez pour mettre en forme les cellules d’une colonne. Dans l’exemple suivant, l’identification DataTemplate avec un ResourceKey jeu pour Binding un GridViewColumn. Notez que cet exemple ne définit pas la DisplayMemberBinding valeur car cela est prioritaire 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}"/>

Appliquer un style à un ListView implémentant un GridView

Le ListView contrôle contient des ListViewItem objets, qui représentent les éléments de données affichés. Vous pouvez utiliser les propriétés suivantes pour définir le contenu et le style des éléments de données :

Pour éviter les problèmes d’alignement entre les cellules d’un GridView, n’utilisez pas les ItemContainerStyle propriétés pour définir des propriétés ou ajouter du contenu qui affecte la largeur d’un élément dans un ListView. Par exemple, un problème d’alignement peut se produire lorsque vous définissez la Margin propriété dans le ItemContainerStyle. Pour spécifier des propriétés ou définir du contenu qui affecte la largeur des éléments dans un GridView, utilisez les propriétés de la GridView classe et ses classes associées, telles que GridViewColumn.

Pour plus d’informations sur l’utilisation GridView et ses classes de prise en charge, consultez La vue d’ensemble de GridView.

Si vous définissez un ItemContainerStyleListView contrôle et définissez également un ItemTemplate, vous devez inclure un ContentPresenter dans le style pour que le ItemTemplate travail fonctionne correctement.

N’utilisez pas les propriétés et VerticalContentAlignment les propriétés pour ListView le HorizontalContentAlignment contenu affiché par un GridView. Pour spécifier l’alignement du contenu dans une colonne d’un GridView, définissez un CellTemplate.

Partage du mode d’affichage

Deux ListView contrôles ne peuvent pas partager le même mode d’affichage en même temps. Si vous essayez d’utiliser le même mode d’affichage avec plusieurs ListView contrôles, une exception se produit.

Pour spécifier un mode d’affichage qui peut être utilisé simultanément par plusieurs ListViewmodèles ou styles.

Créer un mode d’affichage personnalisé

Les vues personnalisées comme GridView celles-ci sont dérivées de la ViewBase classe abstraite, qui fournit les outils permettant d’afficher les éléments de données représentés en tant qu’objets ListViewItem .

Informations de référence sur le code

Les objets suivants sont référencés dans cet article :

  • EmployeeInfoDataSource collecte de données. Si vous utilisez Visual Basic .NET, l’élément Window est déclaré légèrement différent de ce que vous voyez dans l’exemple de code :

    <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, qui est utilisée comme type pour la EmployeeInfoDataSource collecte de données.

    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
    

Voir aussi