使用类在ListView上实现初始排序

时间:2015-07-16 15:39:44

标签: c# wpf listview

我使用http://www.thomaslevesque.com/2009/08/04/wpf-automatically-sort-a-gridview-continued/找到的课程。但它没有提供在应用程序加载时对ListView列进行排序的功能。您需要在它工作之前单击列。我的知识还不够先进,无法实现这一点。有人可以帮我吗?

1 个答案:

答案 0 :(得分:4)

来自以下...... http://www.wpf-tutorial.com/listview-control/listview-sorting/

您可以将SortDescription添加到ListView的{​​{1}},因此......

CollectionView

所以,如果您的CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(YOURLISTVIEWNAME.ItemsSource); cv.SortDescriptions.Add(new SortDescription("COLUMNNAMETOSORT", ListSortDirection.Ascending)); 被称为ListView,并且您希望按lv进行排序,那么您会... {/ p>

Name

在您链接的代码中,有两个函数

CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(lv.ItemsSource);
cv.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

我认为在添加private static void AddSortGlyph private static void RemoveSortGlyph 代码后无法手动调用AddSortGlyph的任何原因。

实际上还有一个SortDescription函数...你可以调用它而不是添加我最初建议的代码!

可以使用此处描述的方法获取列... Get GridViewColumn Header value from ListView? ...但必须在激活窗口后完成(因为在窗口的构造函数中标题不存在)。

最后,将以下代码添加到MainWindow.xaml.cs

public static void ApplySort

并将其添加到您的 private void Window_Activated(object sender, EventArgs e) { List<GridViewColumnHeader> headers = GetVisualChildren<GridViewColumnHeader>(DownloadList).ToList(); GridViewSort.ApplySort(DownloadList.Items, "File Name", DownloadList, headers[10]); } public static IEnumerable<T> GetVisualChildren<T>(DependencyObject parent) where T : DependencyObject { int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++) { DependencyObject child = VisualTreeHelper.GetChild(parent, i); if (child is T) yield return (T)child; foreach (var descendant in GetVisualChildren<T>(child)) yield return descendant; } } Xaml元素

Window

例如

Activated="Window_Activated"

我刚刚对你的代码进行了测试......比我一直在做的所有猜测都要容易得多!