Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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:
En el 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 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, elWindow
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 laEmployeeInfoDataSource
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
.NET Desktop feedback