Compartir a través de


Información general sobre ListView

El ListView control proporciona la infraestructura para mostrar un conjunto de elementos de datos utilizando un diseño o vista diferente. Por ejemplo, un usuario puede querer mostrar elementos de datos en una tabla y también ordenar sus columnas.

Nota:

Los tipos a los que se hace referencia en este artículo están disponibles en la sección Referencia de código .

¿Qué es un ListView?

ListView deriva de ListBox. Normalmente, sus elementos son miembros de una colección de datos y se representan como ListViewItem objetos. A ListViewItem es un ContentControl y solo puede contener un solo elemento hijo. Sin embargo, ese elemento secundario puede ser cualquier elemento visual.

Definir un modo de vista para un ListView.

Para especificar un modo de vista para el contenido de un ListView control, establezca la View propiedad . Un modo de vista que proporciona Windows Presentation Foundation (WPF) es GridView, que muestra una colección de elementos de datos en una tabla que tiene columnas personalizables.

En el ejemplo siguiente se muestra cómo definir un GridView para un ListView control que muestra la información de los empleados.


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

En la ilustración siguiente se muestra cómo aparecen los datos en el ejemplo anterior.

Captura de pantalla que muestra un ListView con salida de GridView.

Para crear un modo de vista personalizado, defina una clase que herede de la ViewBase clase . La ViewBase clase proporciona la infraestructura necesaria para crear una vista personalizada. Para obtener más información sobre cómo crear una vista personalizada, vea Crear un modo de vista personalizada para un control ListView.

Enlazar datos a un ListView

Use las Items propiedades y ItemsSource para especificar elementos para un ListView control. En el ejemplo siguiente se establece la ItemsSource propiedad en una colección de datos denominada EmployeeInfoDataSource.

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

En un GridView, GridViewColumn los objetos se enlazan a campos de datos especificados. En el siguiente ejemplo, un objeto GridViewColumn se enlaza a un campo de datos especificando un Binding para la propiedad 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"/>

También puede especificar un Binding elemento como parte de una DataTemplate definición que se usa para aplicar estilo a las celdas de una columna. En el siguiente ejemplo, el DataTemplate identificado con un ResourceKey establece el Binding para un GridViewColumn. Tenga en cuenta que este ejemplo no define el DisplayMemberBinding porque hacerlo tiene prioridad sobre el 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}"/>

Aplicar estilo a un ListView que usa un GridView

El ListView control contiene ListViewItem objetos, que representan los elementos de datos que se muestran. Puede usar las siguientes propiedades para definir el contenido y el estilo de los elementos de datos:

Para evitar problemas de alineación entre las celdas en un GridView, no utilice ItemContainerStyle para establecer propiedades o agregar contenido que afecte al ancho de un elemento en un ListView. Por ejemplo, se puede producir un problema de alineación al establecer la Margin propiedad en el ItemContainerStyle. Para especificar propiedades o definir contenido que afecte al ancho de los elementos en GridView, use las propiedades de la clase GridView y sus clases relacionadas, como GridViewColumn.

Para obtener más información sobre cómo usar GridView y sus clases auxiliares, consulte Información general sobre GridView.

Si define un ItemContainerStyle para un control ListView y también define un ItemTemplate, debe incluir un ContentPresenter en el estilo para que ItemTemplate funcione correctamente.

No utilice las propiedades HorizontalContentAlignment y VerticalContentAlignment para el contenido ListView mostrado por un GridView. Para especificar la alineación del contenido en una columna de GridView, defina un CellTemplate.

Compartir el mismo modo de vista

Dos ListView controles no pueden compartir el mismo modo de vista al mismo tiempo. Si intenta usar el mismo modo de vista con más de un ListView control, se produce una excepción.

Para especificar un modo de vista que puede usar simultáneamente más de un ListView, use plantillas o estilos.

Crear un modo de vista personalizado

Las vistas personalizadas como GridView se derivan de la clase abstracta ViewBase, que proporciona las herramientas para mostrar los elementos de datos representados como objetos ListViewItem.

Referencia de código

En este artículo se hace referencia a los siguientes objetos:

  • EmployeeInfoDataSource recogida de datos. Si usa Visual Basic .NET, el Window elemento se declara ligeramente diferente de lo que ve en el código de ejemplo:

    <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 clase , que se usa como tipo para la EmployeeInfoDataSource recopilación de datos.

    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
    

Consulte también