Partilhar via


Visão geral do ListView

O controle ListView fornece a infraestrutura para exibir um conjunto de itens de dados usando um layout ou exibição diferente. Por exemplo, um usuário pode querer exibir itens de dados em uma tabela e também classificar suas colunas.

Observação

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

O que é um ListView?

O ListView deriva de ListBox. Normalmente, seus itens são membros de uma coleção de dados e são representados como objetos ListViewItem. Um ListViewItem é um ContentControl e pode conter apenas um único elemento filho. Contudo, esse elemento filho pode ser qualquer elemento visual.

Definindo um modo de exibição para um ListView

Para especificar um modo de exibição para o conteúdo de um controle ListView, defina a propriedade View. Um modo de exibição que o Windows Presentation Foundation (WPF) fornece é o GridView, que exibe uma coleção de itens de dados em uma tabela que tem colunas personalizáveis.

O exemplo a seguir mostra como definir um GridView para um controle de ListView que exibe informações de funcionários.


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

A ilustração a seguir mostra como os dados aparecem para o exemplo anterior.

Captura de tela que mostra um ListView com saída GridView.

Você pode criar um modo de exibição personalizado definindo uma classe que herda da classe ViewBase. A classe ViewBase fornece a infraestrutura necessária para criar uma exibição personalizada. Para obter mais informações sobre como criar um modo de exibição personalizado, consulte Criar um modo de exibição personalizado para um ListView.

Vinculando dados a um ListView

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

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

Em um GridView, GridViewColumn objetos ligam-se a campos de dados especificados. O exemplo a seguir vincula um objeto GridViewColumn a um campo de dados especificando um Binding para a propriedade 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"/>

Você também pode especificar um Binding como parte de uma definição de DataTemplate que você usa para definir o estilo das células em uma coluna. No exemplo a seguir, o DataTemplate identificado com um ResourceKey define o Binding para um GridViewColumn. Observe que este exemplo não define o DisplayMemberBinding porque isso tem precedência 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}"/>

Estilizando um ListView que implementa um GridView

O controle ListView contém objetos ListViewItem, que representam os itens de dados que são exibidos. Você 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 em um GridView, não use o ItemContainerStyle para definir propriedades ou adicionar conteúdo que afete a largura de um item em um ListView. Por exemplo, um problema de alinhamento pode ocorrer quando você define a propriedade Margin no ItemContainerStyle. Para especificar propriedades ou definir conteúdo que afeta a largura dos itens em um GridView, use as propriedades da classe GridView e suas classes relacionadas, como GridViewColumn.

Para obter mais informações sobre como usar o GridView e suas classes de suporte, consulte Visão geral do GridView.

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

Não use as propriedades HorizontalContentAlignment e VerticalContentAlignment para conteúdo ListView apresentado por um GridView. Para especificar o alinhamento do conteúdo em uma coluna de um GridView, defina uma CellTemplate.

Partilhar o mesmo modo de visualização

Dois controles ListView não podem compartilhar o mesmo modo de exibição ao mesmo tempo. Se você tentar usar o mesmo modo de exibição com mais de um controle ListView, ocorrerá uma exceção.

Para especificar um modo de exibição que possa ser usado simultaneamente por mais de uma ListView, use modelos ou estilos.

Criando um modo de exibição personalizado

Exibições personalizadas como GridView são derivadas da classe abstrata ViewBase, que fornece as ferramentas para exibir itens de dados representados como objetos ListViewItem.

Referência de código

Os seguintes objetos são referenciados neste artigo:

  • EmployeeInfoDataSource recolha de dados. Se você estiver usando o Visual Basic .NET, o elemento Window é declarado ligeiramente diferente do que você vê 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>
    
  • classe EmployeeInfo, que é usada como o tipo para a coleção de dados EmployeeInfoDataSource.

    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
    

Ver também