This article has been localized into Vietnamese by the community.
Sắp xếp trong ListView
Trong chương trước, chúng ta đã thấy làm thế nào chúng ta có thể nhóm các mục trong ListView WPF bằng cách truy cập vào đối tượng View của ListView và sau đó thêm mô tả nhóm. Áp dụng sắp xếp vào ListView cũng dễ dàng và hầu hết quá trình này hoàn toàn giống nhau. Hãy thử một ví dụ đơn giản trong đó chúng tôi sắp xếp các đối tượng người dùng theo độ tuổi của họ:
<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 trông giống như một ví dụ trước đây, nơi chúng tôi chỉ cần có một vài cột để hiển thị thông tin về người dùng - không có gì mới ở đây.
Trong Code-behind, một lần nữa chúng ta tạo một danh sách các đối tượng User, sau đó chúng ta sẽ gán làm ItemSource của ListView. Khi chúng ta đã thực hiện điều đó, chúng ta sử dụng thuộc tính ItemSource để lấy đối tượng CollectionView mà ListView tự động tạo cho chúng ta và chúng ta có thể sử dụng để thao tác sao cho ListView hiển thị các đối tượng của chúng ta the ý muốn.
Với đối tượng xem trong tay, chúng tôi thêm một new SortDescription vào nó, xác định rằng chúng tôi muốn danh sách của chúng tôi được sắp xếp theo thuộc tính Age, theo thứ tự tăng dần. Như bạn có thể thấy từ ảnh chụp màn hình, điều này hoạt động hoàn toàn tốt - danh sách được sắp xếp theo độ tuổi, thay vì theo thứ tự như các mục đã được thêm vào.
Nhiều tiêu chí sắp xếp
Như trong ví dụ đầu tiên, việc sắp xếp rất dễ dàng, nhưng trên ảnh chụp màn hình bạn sẽ thấy Sammy đến trước Donna. Họ có cùng độ tuổi, vì vậy trong trường hợp này, WPF sẽ chỉ sử dụng thứ tự mà họ đã được thêm vào. May mắn thay, WPF cho phép chúng tôi xác định nhiều tiêu chí sắp xếp như chúng tôi muốn. Trong ví dụ trên, hãy thử thay đổi code liên quan đến chế độ xem thành một cái gì đó như thế này:
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvUsers.ItemsSource);
view.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending));
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
Bây giờ, chế độ xem sẽ được sắp xếp theo tuổi trước và khi tìm thấy hai giá trị giống hệt nhau, tên sẽ được sử dụng làm tham số sắp xếp thứ cấp.
Tổng kết
Thật dễ dàng để sắp xếp nội dung của ListView, như đã thấy trong các ví dụ trên, nhưng cho đến nay, tất cả việc sắp xếp đều do người lập trình quyết định chứ không phải người dùng. Trong bài viết tiếp theo tôi sẽ cung cấp cho bạn một bài viết hướng dẫn chỉ cho bạn cách để người dùng quyết định sắp xếp bằng cách nhấp vào các cột, như đã thấy trong Windows.