我使用http://www.thomaslevesque.com/2009/08/04/wpf-automatically-sort-a-gridview-continued/找到的课程。但它没有提供在应用程序加载时对ListView列进行排序的功能。您需要在它工作之前单击列。我的知识还不够先进,无法实现这一点。有人可以帮我吗?
答案 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"
我刚刚对你的代码进行了测试......比我一直在做的所有猜测都要容易得多!