TOC

This article is currently in the process of being translated into Portuguese (~99% done).

O controle ListView:

ListView sorting

No último capítulo, vimos como poderíamos agrupar itens no ListView do WPF acessando a instância View do ListView e, em seguida, adicionando uma descrição do grupo. Aplicar a classificação a um ListView é igualmente fácil e a maior parte do processo é exatamente a mesma. Vamos tentar um exemplo simples em que classificamos os objetos do usuário por idade:

<Window x:Class="WpfTutorialSamples.ListView_control.ListViewSortingSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ListViewSortingSample" Height="200" Width="300">
    <Grid Margin="10">
        <ListView Name="lvUsers">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
                    <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Data;

namespace WpfTutorialSamples.ListView_control
{
	public partial class ListViewSortingSample : Window
	{
		public ListViewSortingSample()
		{
			InitializeComponent();
			List<User> items = new List<User>();
			items.Add(new User() { Name = "John Doe", Age = 42 });
			items.Add(new User() { Name = "Jane Doe", Age = 39 });
			items.Add(new User() { Name = "Sammy Doe", Age = 13 });
			items.Add(new User() { Name = "Donna Doe", Age = 13 });
			lvUsers.ItemsSource = items;

			CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvUsers.ItemsSource);
			view.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending));
		}
	}

	public class User
	{
		public string Name { get; set; }

		public int Age { get; set; }
	}
}

O XAML se parece com um exemplo anterior, em que simplesmente temos algumas colunas para exibir informações sobre o usuário - nada de novo aqui.

No Code-behind, mais uma vez criamos uma lista de objetos User, que então designamos como ItemsSource do ListView. Uma vez feito isso, usamos a propriedade ItemsSource para obter a instância do CollectionView que o ListView cria automaticamente para nós e que podemos usar para manipular como o ListView mostra nossos objetos.

Com o objeto view em nossa mão, adicionamos um novo SortDescription a ele, especificando que queremos que nossa lista seja classificada pela propriedade Age, em ordem crescente. Como você pode ver na captura de tela, isso funciona perfeitamente bem - a lista é classificada por idade, em vez de estar na mesma ordem em que os itens foram adicionados.

Vários critérios de classificação

Como mostrado no primeiro exemplo, a classificação é muito fácil, mas na tela você verá que Sammy vem antes de Donna. Eles têm a mesma idade, portanto, neste caso, o WPF apenas usará a ordem em que foram adicionados. Felizmente, o WPF nos permite especificar quantos critérios de classificação desejarmos. No exemplo acima, tente alterar o código relacionado à visualização para algo como isto:

CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvUsers.ItemsSource);
view.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending));
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

Agora, a visualização será classificada usando a idade primeiro e, quando dois valores idênticos forem encontrados, o nome será usado como um parâmetro de classificação secundário.

Resumo

É muito fácil classificar o conteúdo de um ListView, como visto nos exemplos acima, mas até agora, toda a classificação é decidida pelo programador e não pelo usuário final. No próximo artigo, darei um artigo explicativo sobre como permitir que o usuário decida a classificação clicando nas colunas, conforme visto no Windows.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!