WPF - Usando o controle ListView - 1


Este artigo mostra como usar o controle ListView em aplicações WPF- Windows Presentation Foundation.

Como a WPF permite a composição de componentes e devido as capacidades e características do controle ListView temos quase que infinitas possibilidades de usos deste controle em aplicações WPF. Eu vou procurar mostrar algumas delas...

Vamos começar pelo começo (risos) mostrando o básico como criar colunas, exibir dados, etc, por isso se você espera um artigo excitante talvez fique frustrado, mas a vida é assim mesmo, hoje o arroz com feijão, amanhã o camarão...

Ferramentas usadas nos exemplos do artigo:

Abra o VB 2010 Express Edition e crie um novo projeto do tipo WPF Application com o nome wpf_ListView;
Você deverá obter uma tela conforme o da figura abaixo exibindo o projeto criado;
Para iniciar vamos criar um ListView vazio. Para isso vamos incluir o código abaixo no arquivo MainWindow.xaml usando a linguagem XAML;
<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Usando ListView" Height="350" Width="525">
    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="140" Header="Coluna 1" />
                <GridViewColumn Width="140" Header="Coluna 2" />
                <GridViewColumn Width="140" Header="Coluna 3" />
            </GridView>
        </ListView.View>
    </ListView>
</Window>
Veja abaixo uma visão atual do projeto:

Observe que temos no código a seção ListView.View onde criamos um GridView e definimos 3 GridViewColumns. Usando os recursos de GridViewColumns poderemos redimensionar as colunas e usar o recurso do drag and drop para reordenar as colunas.

Vamos agora incluir alguns dados no ListView alterando o código para:

<Window x:Class="ListViewTest.Test1.ListViewTest"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:sys="clr-namespace:System;assembly=mscorlib"
   Title="Datas" Height="216" Width="435">
    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="120" Header="Data" />
                <GridViewColumn Width="120" Header="Dia da Semana"  
           DisplayMemberBinding="{Binding DayOfWeek}" />
                <GridViewColumn Width="120" Header="Ano" 
           DisplayMemberBinding="{Binding Year}" />
            </GridView>
        </ListView.View>
        <sys:DateTime>1/2/3</sys:DateTime>
        <sys:DateTime>4/5/6</sys:DateTime>
        <sys:DateTime>7/8/9</sys:DateTime>
        <sys:DateTime>10/11/12</sys:DateTime>
    </ListView>
</Window>
O resultado pode ser visto na figura a seguir:
Vejamos o que/como foi implementado:
Podemos no entanto incluir os nossos próprios dados usando a linguagem XAML e algum código no arquivo code-behind. Vejamos um exemplo:
Substitua o código XAML para o seguinte código :
<Window x:Class="ListViewTest.Test2.ListViewTest"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   DataContext="{Binding RelativeSource={RelativeSource Self}}"
   Title="Alguns dados" Height="216" Width="435">
    <StackPanel>
        <ListView ItemsSource="{Binding FutebolCollection}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="140" Header="Time"  DisplayMemberBinding="{Binding Time}"  />
                    <GridViewColumn Width="140" Header="Treinador"  DisplayMemberBinding="{Binding Treinador}" />
                    <GridViewColumn Width="140" Header="Jogador" DisplayMemberBinding="{Binding Jogador}" />
                </GridView>
            </ListView.View>

        </ListView>
        <Button HorizontalAlignment="Right" Margin="5,5,5,5"
       Content="Incluir Linha" Name="IncluirLinha" />
    </StackPanel>
</Window>

A seguir temos o código onde estamos definindo um construtor que preenche uma coleção com os dados de times de futebol referente ao treinador e o jogador.

Imports System.Windows.Controls
Imports System.Collections.ObjectModel

Namespace ListViewTest.Test2

    Partial Public Class ListViewTest
        Inherits Window

        Private _FutebolCollection As New ObservableCollection(Of FutebolDados)()

        Private Sub IncluirLinha_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles IncluirLinha.Click
            _FutebolCollection.Add(New FutebolDados() With { _
             .Time = "Um novo time", _
             .Treinador = "Um novo treinador", _
             .Jogador = "Um novo jogador" _
            })
        End Sub

        Public Sub New()
            _FutebolCollection.Add(New FutebolDados() With { _
             .Time = "Flamento", _
             .Treinador = "Andrade", _
             .Jogador = "Adriano" _
            })
            _FutebolCollection.Add(New FutebolDados() With { _
             .Time = "Santos", _
             .Treinador = "Dorival", _
             .Jogador = "Robinho" _
            })
            _FutebolCollection.Add(New FutebolDados() With { _
             .Time = "Palmeiras", _
             .Treinador = "Felipão", _
             .Jogador = "Kleber" _
            })
            InitializeComponent()
        End Sub

        Public ReadOnly Property FutebolCollection() As ObservableCollection(Of FutebolDados)
            Get
                Return _FutebolCollection
            End Get
        End Property
    End Class

    Public Class FutebolDados
        Public Property Time() As String
            Get
                Return m_Time
            End Get
            Set(ByVal value As String)
                m_Time = value
            End Set
        End Property
        Private m_Time As String
        Public Property Treinador() As String
            Get
                Return m_Treinador
            End Get
            Set(ByVal value As String)
                m_Treinador = value
            End Set
        End Property
        Private m_Treinador As String
        Public Property Jogador() As String
            Get
                Return m_Jogador
            End Get
            Set(ByVal value As String)
                m_Jogador = value
            End Set
        End Property
        Private m_Jogador As String
    End Class
End Namespace

Ao executar o projeto iremos obter o seguinte resultado:

Temos no código a definição de objetos FutebolDados que desejamos exibir no ListView. Para isso definimos a classe e o construtor onde criarmos alguns objetos usando as propriedades Time, Treinador e Jogador.

Após preencher a coleção efetuamos a vinculação via ItemSource do controle ListView.

Pegue o projeto completo aqui: Wpf_ListView.zip
WPF, Simples, simples assim... 
Referências:

José Carlos Macoratti