TOC

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

Il controllo ListView:

Ordinamento delle ListView

Nell'ultimo capitolo abbiamo visto come poter raggruppare gli elementi in ListView di WPF accedendo all'istanza View di ListView e quindi aggiungendo una descrizione di gruppo. Applicare l'ordinamento a ListView è altrettanto semplice e la maggior parte del processo è esattamente la stessa. Proviamo un semplice esempio in cui ordiniamo gli oggetti utente in base alla loro età:

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

L'XAML appare come nell'esempio precedente: abbiamo semplicemente un paio di colonne per la visualizzazione delle informazioni sull'utente. Fin qui niente di nuovo.

Nel Code-behind, creiamo ancora una volta un elenco di oggetti User, che assegniamo come ItemsSource alla ListView. Una volta fatto ciò, utilizziamo la proprietà ListView.ItemsSource per ottenere l'istanza CollectionView, che usiamo per manipolare il modo in cui ListView mostra i nostri oggetti.

Con l'oggetto view in mano, aggiungiamo un nuovo SortDescription, specificando che vogliamo che il nostro elenco sia ordinato in base alla proprietà Age, in ordine crescente. Come puoi vedere dallo screenshot, funziona perfettamente: l'elenco è ordinato per età, invece di essere nello stesso ordine in cui sono stati aggiunti gli elementi.

Criteri di ordinamento multipli

Come mostrato nel primo esempio, l'ordinamento è molto semplice, ma sullo screenshot vedrai che Sammy viene prima di Donna. Hanno la stessa età, quindi in questo caso WPF utilizzerà semplicemente l'ordine in cui sono stati aggiunti. Fortunatamente, WPF ci consente di specificare tutti i criteri di ordinamento che vogliamo. Di seguito il codice:

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

Ora la vista verrà ordinata per prima usando age, e quando vengono trovati due valori identici, come parametro di ordinamento secondario verrà usato il nome.

Summary

È molto facile ordinare il contenuto di un ListView, come visto negli esempi precedenti, ma finora tutto l'ordinamento è deciso dal programmatore e non dall'utente finale. Nel prossimo articolo ti fornirò un articolo che mostra come consentire all'utente di decidere l'ordinamento facendo clic sulle colonne, come mostrato in 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!