Partilhar via


Visão de Lista

O ListView controlo fornece a infraestrutura para apresentar um conjunto de itens de dados usando um layout ou modo de visualização diferente. Por exemplo, pode querer mostrar os itens de dados numa tabela e também ordenar as suas colunas.

Deriva ListView de ListBox. Normalmente, os seus itens são membros de uma coleção de dados e são representados como ListViewItem objetos. O ListViewItem é um ContentControl e pode conter apenas um elemento filho. No entanto, esse elemento filho pode ser qualquer elemento visual.

Captura de ecrã mostrando um ListView com saída GridView a mostrar informações do ficheiro.

Observação

Os tipos referenciados neste artigo estão disponíveis na secção de referência do Código .

A tabela seguinte lista tarefas comuns para trabalhar com o controlo ListView:

Title Description
Ordenar uma coluna do GridView quando um cabeçalho é clicado Aprenda a ordenar uma coluna do GridView quando um cabeçalho é clicado.
Criar um modo de visualização personalizada para uma ListView Aprenda a criar um modo de visualização personalizado para uma Vista de Lista.
Use modelos para estilizar uma vista de lista que utilize o GridView Aprenda a usar modelos para estilizar um ListView que utilize GridView.
Criar um Estilo para o cabeçalho de coluna arrastado do GridView Aprenda a criar um estilo para um cabeçalho de coluna GridView arrastado.
Mostrar conteúdos do ListView usando um GridView Aprenda a mostrar conteúdos na Vista de Lista usando uma Vista de Grade.
Use gatilhos para estilizar itens selecionados numa vista de lista Aprenda a usar gatilhos para estilizar itens selecionados numa Vista de Lista.
Criar Itens do ListView com uma CheckBox Aprenda a criar ListViewItems com uma CheckBox.
Exibir dados usando o GridViewRowPresenter Aprenda a mostrar dados usando o GridViewRowPresenter.
Agrupar itens numa ListView que implementa uma GridView Aprenda a agrupar itens numa ListView que implemente uma GridView.
Estilizar uma linha numa Vista de Lista que implemente uma GridView Aprenda a estilizar uma linha numa ListView que implemente uma GridView.
Altere o alinhamento horizontal de uma coluna numa ListView Aprenda a alterar o alinhamento horizontal de uma coluna numa ListView.
Gerir o evento MouseDoubleClick para cada item numa Lista de Visualização Aprenda a lidar com o evento MouseDoubleClick para cada item numa ListView.

Estilos e modelos

Podes modificar o padrão ControlTemplate para dar ao controlo uma aparência única. Para mais informações, veja O que são estilos e modelos? e Como criar um modelo para um controlo.

Propriedade de conteúdo

O ListView controlo utiliza a Items propriedade como sua propriedade de conteúdo. Esta propriedade permite-lhe especificar os itens exibidos no controlo.

Partes

O ListView controlo não define nenhuma parte de modelo nomeada.

Quando cria um ControlTemplate para um ListView, o seu modelo pode conter um ItemsPresenter dentro de um ScrollViewer. O ItemsPresenter apresenta cada item no ListView; o ScrollViewer permite que se faça scroll dentro do controlo. Se o ItemsPresenter não for filho direto do ScrollViewer, deve atribuir o nome ItemsPresenter ao ItemsPresenter.

Estados visuais

A tabela seguinte lista os estados visuais do ListView controlo.

Nome VisualState Nome VisualStateGroup Description
Válido Estados de Validação O controlo é válido e não tem erros de validação.
FocadoInválido Estados de Validação O controlo apresenta um erro de validação e tem o foco do teclado.
InvalidUnfocused Estados de Validação O controlo tem um erro de validação mas não tem foco no teclado.

A tabela seguinte lista os estados para o ListViewItem controlo.

Nome VisualState Nome VisualStateGroup Description
Normal Estados Comuns O estado padrão.
Disabled Estados Comuns O controlo está desativado.
MouseOver Estados Comuns O ponteiro do rato está sobre o comando.
Focused FocusStates O controlo tem foco no teclado.
Sem foco FocusStates O controlo não está focado no teclado.
Selecionados Estados de Seleção O item está atualmente selecionado.
não selecionado Estados de Seleção O item não está selecionado.
SelecionadoSem Foco Estados de Seleção O item está selecionado mas não tem foco no teclado.
Válido Estados de Validação O controlo é válido e não tem erros de validação.
FocadoInválido Estados de Validação O controlo apresenta um erro de validação e tem o foco do teclado.
InvalidUnfocused Estados de Validação O controlo tem um erro de validação mas não tem foco no teclado.

Modos de visualização

Para especificar um modo de visualização para o conteúdo de um ListView controlo, defina a View propriedade. Um modo de visualização que o Windows Presentation Foundation (WPF) oferece é GridView, que apresenta uma coleção de itens de dados numa tabela com colunas personalizáveis.

O exemplo seguinte mostra como definir um GridView para um ListView controlo que exibe informação do colaborador.


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

Podes criar um modo de vista personalizado definindo uma classe que herda dessa ViewBase classe. A ViewBase classe fornece a infraestrutura necessária para criar uma vista personalizada. Para mais informações sobre como criar uma vista personalizada, consulte Criar um Modo de Vista Personalizada para uma Vista de Lista.

Partilha de modos de visualização

Dois ListView controlos não podem partilhar o mesmo modo de visualização ao mesmo tempo. Se tentar usar o mesmo modo de visualização com mais do que um ListView controlo, ocorre uma exceção. Para especificar um modo de visualização que possa ser usado simultaneamente por mais de um ListView, use modelos ou estilos.

Vinculação de dados

Utilize as propriedades Items e ItemsSource para especificar itens para um controlo ListView. O exemplo seguinte define a ItemsSource propriedade para uma coleção de dados chamada EmployeeInfoDataSource.

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

Num GridView, GridViewColumn os objetos associam-se a campos de dados especificados. O exemplo seguinte liga um GridViewColumn objeto a um campo de dados especificando a Binding para a DisplayMemberBinding propriedade.

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

Também pode especificar a Binding como parte de uma definição de DataTemplate que utiliza para estilizar as células numa coluna. No exemplo seguinte, o DataTemplate identificado com a ResourceKey define o Binding para um GridViewColumn. Note que este exemplo não define o DisplayMemberBinding porque fazê-lo tem prioridade 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}"/>

Controlo de estilo ListView

O ListView controlo contém ListViewItem objetos, que representam os itens de dados que são exibidos. Pode usar as seguintes propriedades para definir o conteúdo e o estilo dos itens de dados:

Para evitar problemas de alinhamento entre células num GridView, não use o ItemContainerStyle para definir propriedades ou adicionar conteúdo que afete a largura de um item num ListView. Por exemplo, pode ocorrer um problema de alinhamento quando se define a Margin propriedade no ItemContainerStyle. Para especificar propriedades ou definir conteúdo que afeta a largura dos itens num GridView, use as propriedades da GridView classe e das suas classes relacionadas, como GridViewColumn. Para mais informações sobre como usar GridView e as suas classes de suporte, consulte GridView Overview.

Se definir um ItemContainerStyle para um controlo ListView e também definir um ItemTemplate, deve incluir um ContentPresenter no estilo para que o ItemTemplate funcione corretamente.

Não use as propriedades HorizontalContentAlignment e VerticalContentAlignment para conteúdo ListView exibido por um GridView. Para especificar o alinhamento do conteúdo numa coluna de um GridView, define-se um CellTemplate.

Referência do código

Os seguintes objetos são referenciados neste artigo:

  • EmployeeInfoDataSource Recolha de dados. Se estiveres a usar o Visual Basic .NET, o Window elemento é declarado ligeiramente diferente do que vês no código de exemplo:

    <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, que é usada como tipo para a recolha de EmployeeInfoDataSource dados.

    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 também