对ListView中的项进行排序,思路是处理GridViewColumnHeader的Clicke事件,事件处理代码如下:
static void OnGridViewColumnHeaderClicked(object sender, RoutedEventArgs e)
{
var listview = sender as ListView;
var header = e.OriginalSource as GridViewColumnHeader;
if (listview != null && header != null)
{
var propName = header.Column.Header as string;
if (propName != null)
{
UpdateSortDescription(CollectionViewSource.GetDefaultView(listview.ItemsSource), propName);
}
}
}
static void UpdateSortDescription(ICollectionView view, string propName)
{
ListSortDirection direction = ListSortDirection.Ascending;
if (view.SortDescriptions.Count > 0 && view.SortDescriptions[0].PropertyName == propName)
{
if (view.SortDescriptions[0].Direction == ListSortDirection.Ascending)
{
direction = ListSortDirection.Descending;
}
}
//排序代码
view.SortDescriptions.Clear();
view.SortDescriptions.Add(new SortDescription(propName, direction));
view.Refresh();
}
现在的问题是:
1.虽然每次点击列头时排序代码都执行了,但只有第一次点击时有效果,后面再点都没有反应(排序的顺序是对的)
2.第一次排序的结果不正确,如下图,是点击ID列后的结果,不清楚这个顺序是怎么出来的,
怎么破?