Información general sobre ListView
El control ListView proporciona la infraestructura para mostrar un conjunto de elementos de datos usando un diseño o vista distinto. Por ejemplo, es posible que un usuario quiera mostrar elementos de datos en una tabla y, además, ordenar las 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 ListView?
La clase ListView se deriva de la clase ListBox. Habitualmente, sus elementos son miembros de una recopilación de datos y se representan como objetos ListViewItem. Un objeto ListViewItem es un ContentControl y solo puede contener un único elemento secundario. Sin embargo, el elemento secundario puede ser cualquier elemento visual.
Definición de un modo de vista para ListView
Para especificar un modo de vista para un control ListView, establezca la propiedad View. Un modo de vista que proporciona Windows Presentation Foundation (WPF) es GridView, que muestra una colección de elementos de datos en una tabla con columnas personalizables.
En el ejemplo siguiente se muestra cómo definir un GridView para un control ListView que muestra información sobre 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 control ListView con salida GridView.
Puede crear un modo de vista personalizada si define una clase que hereda de la clase ViewBase. La clase ViewBase proporciona la infraestructura que se necesita para crear una vista personalizada. Para más información sobre cómo crear una vista personalizada, consulte Creación de un modo de vista personalizada para un control ListView.
Enlace de datos a un control ListView
Use las propiedades Items y ItemsSource para especificar elementos para un control ListView. En el siguiente ejemplo, se establece la propiedad ItemsSource para una recopilación de datos llamada EmployeeInfoDataSource
.
<ListView ItemsSource="{Binding Source={StaticResource EmployeeInfoDataSource}}">
En un GridView, los objetos GridViewColumn se enlazan a los campos de datos especificados. En el ejemplo siguiente se enlaza un objeto GridViewColumn 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 como parte de una definición DataTemplate que utilice para dar estilo a las celdas de una columna. En el ejemplo siguiente, el DataTemplate que se identifica con un objeto ResourceKey establece el Binding para GridViewColumn. Tenga en cuenta que este ejemplo no define el DisplayMemberBinding porque tiene prioridad sobre 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}"/>
Aplicación de un estilo a un control ListView que implementa GridView
El control ListView contiene ListViewItem objetos, que representan los elementos de datos que se muestran. Puede usar las propiedades siguientes para definir el contenido y el estilo de los elementos de datos:
En el control ListView, use las propiedades ItemTemplate, ItemTemplateSelector y ItemContainerStyle.
En el control ListViewItem, use las propiedades ContentTemplate y ContentTemplateSelector.
Para evitar problemas de alineación entre celdas en una GridView, no use ItemContainerStyle para establecer las propiedades o añadir contenido que afecte a la anchura de un elemento en un ListView. Podría producirse un problema de alineación cuando establece la propiedad Margin en ItemContainerStyle, por ejemplo. Para especificar las propiedades o definir el contenido que afecta a la anchura de los elementos en GridView, use las propiedades de la clase GridView y sus clases relacionadas, como GridViewColumn.
Para más información sobre cómo usar GridView y sus clases compatibles, 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 use las propiedades HorizontalContentAlignment yVerticalContentAlignment para el contenido ListView que se muestra por un GridView. Para especificar la alineación del contenido de una columna de GridView, defina CellTemplate.
Uso compartido del mismo modo de vista
Dos controles ListView no pueden compartir el mismo modo de vista al mismo tiempo. Si intenta usar el mismo modo de vista con más de un control ListView, se genera una excepción.
Para especificar un modo de vista que más de un control ListView pueda usar simultáneamente, use las plantillas o los estilos.
Creación de un modo de vista personalizado
Las vistas personalizadas como GridView derivan de la clase abstracta ViewBase, que proporciona las herramientas para mostrar los elementos de datos que se representan como objetos ListViewItem.
Referencia de código
En este artículo se hace referencia a los siguientes objetos:
Recopilación de datos
EmployeeInfoDataSource
. Si usa Visual Basic .NET, el elementoWindow
se declara de forma ligeramente diferente de como se ve en le ejemplo de código:<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>
Clase
EmployeeInfo
, que se usa como tipo para la colección de datosEmployeeInfoDataSource
.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
Vea también
.NET Desktop feedback