TOC

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

Kontrolka ListView:

ListView sorting

W poprzednim rozdziale zobaczyliśmy, jak możemy grupować elementy w kontrolce ListView WPF, poprzez uzyskanie dostępu do instancji View elementu ListView, a następnie dodanie opisu grupy. Zastosowanie sortowania w ListView jest równie proste, a większość procesu jest dokładnie taka sama. Spróbujmy prostego przykładu, w którym sortujemy obiekty user według ich wieku:

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

XAML wygląda podobnie jak w poprzednim przykładzie. Mamy kilka kolumn do wyświetlania informacji o użytkowniku – tutaj nie ma niczego nowego.

W Code-behind ponownie tworzymy listę obiektów User, które następnie przypisujemy jako źródło elementów elementu ListView. Kiedy już to zrobimy, używamy właściwości ItemsSource, aby uzyskać instancję CollectionView, którą ListView automatycznie dla nas tworzy i której możemy używać do manipulowania sposobem, w jaki ListView pokazuje nasze obiekty.

Kiedy już mamy obiekt widoku, dodajemy do niego nową właściwość SortDescription określając, że chcemy aby nasza lista była posortowana według właściwości Age, w kolejności rosnącej. Jak widać na zrzucie ekranu, działa to doskonale - lista została posortowana według wieku, a nie w kolejności w jakiej dodano elementy.

Wiele kryteriów sortowania

Jak pokazano w pierwszym przykładzie, sortowanie jest bardzo proste ale na zrzucie ekranu widać, że Sammy jest przed Donną. Jednocześnie widzimy, że obie mają ten sam wiek, więc w tym przypadku WPF zastosuje po prostu kolejność, w jakiej obiekty zostały dodane. Na szczęście WPF pozwala nam określić dowolną liczbę kryteriów sortowania. W powyższym przykładzie spróbuj zmienić kod związany z tym widokiem na coś takiego:

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

Teraz widok zostanie posortowany według wieku (Age), a gdy zostaną znalezione dwie identyczne wartości, pole imię i nazwisko (Name) zostanie użyte jako dodatkowy parametr sortowania.

Podsumowanie

Jak widać na powyższych przykładach, sortowanie zawartości kontrolki ListView jest bardzo proste ale jak dotąd o całym sortowaniu decyduje programista, a nie użytkownik końcowy. W następnym artykule pokażę, jak pozwolić użytkownikowi na sortowanie zawartości poprzez klikanie w kolumny, tak jak to działa w systemie 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!