Visão geral de ListView

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

Observação

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

O que é uma ListView?

A ListView deriva de ListBox. Normalmente, seus itens são membros de uma coleção de dados e são representados como ListViewItem objetos. A ListViewItem é a ContentControl e pode conter apenas um único elemento filho. No entanto, 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 ListView controle, defina a View propriedade. Um modo de exibição que o Windows Presentation Foundation (WPF) fornece é GridViewo , 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 para um GridViewListView controle que exibe informações do funcionário.


<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 são exibidos no exemplo anterior.

Screenshot that shows a ListView with GridView output.

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

Associando dados a um ListView

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

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

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

Você também pode especificar um Binding como parte de uma definição que você usa para estilizar as células em uma DataTemplate coluna. No exemplo a seguir, o identificado com um define o DataTemplate para um GridViewColumnResourceKey .Binding 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 uma ListView que implemente um GridView

O ListView controle contém ListViewItem objetos, que representam os itens de dados que são exibidos. Você pode usar as propriedades a seguir para definir o conteúdo e estilo de itens de dados:

Para evitar problemas de alinhamento entre células em um , não use o ItemContainerStyle para definir propriedades ou adicionar conteúdo que afete a largura de um item em um .ListViewGridView Por exemplo, um problema de alinhamento pode ocorrer quando você define a Margin propriedade no ItemContainerStyle. Para especificar propriedades ou definir conteúdo que afeta a largura dos itens em um GridView, use as GridView propriedades da classe e suas classes relacionadas, como GridViewColumn.

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

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

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

Compartilhando o mesmo modo de exibição

Dois ListView controles 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 ListView controle, ocorrerá uma exceção.

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

Criando um modo de exibição personalizada

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

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 é declarado Window 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>
    
  • EmployeeInfo classe, que é usada como o tipo para a coleta 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
    

Confira também