列表ListBox、ListView、GridView 排序
阿新 • • 發佈:2017-09-10
ltview sort default descend table course key lis script
列表排序
1.使用控件默認排序方式(推薦)
ListControl.Items.SortDescriptions.Clear(); ListControl.Items.SortDescriptions.Add(new SortDescription("IsGroup", ListSortDirection.Descending)); ListControl.Items.SortDescriptions.Add(new SortDescription(_sortingField?? "UpdateTime", _sortingDirection)); ListControl.Items.Refresh();
2.使用CollectionView排序
var collectionView = CollectionViewSource.GetDefaultView(ListControl.ItemsSource); if (collectionView != null) { collectionView.SortDescriptions.Clear(); collectionView.SortDescriptions.Add(new SortDescription("IsGroup", ListSortDirection.Descending)); collectionView.SortDescriptions.Add(new SortDescription(_sortingField, sortingDirection)); collectionView.Refresh(); }
2.自定義SortableObservableCollection
public class SortableObservableCollection<T> : ObservableCollection<T> { public SortableObservableCollection() { } public SortableObservableCollection(List<T> list) :base(list) { } public SortableObservableCollection(IEnumerable<T> collection) : base(collection) { } public void Sort<TKey>(Func<T, TKey> keySelector, System.ComponentModel.ListSortDirection direction) { switch (direction) { case System.ComponentModel.ListSortDirection.Ascending: { ApplySort(Items.OrderBy(keySelector)); break; } case System.ComponentModel.ListSortDirection.Descending: { ApplySort(Items.OrderByDescending(keySelector)); break; } } } public void Sort<TKey>(Func<T, TKey> keySelector, IComparer<TKey> comparer) { ApplySort(Items.OrderBy(keySelector, comparer)); } private void ApplySort(IEnumerable<T> sortedItems) { var sortedItemsList = sortedItems.ToList(); foreach (var item in sortedItemsList) { Move(IndexOf(item), sortedItemsList.IndexOf(item)); } } }
添加列表屬性,並綁定到控件
public SortableObservableCollection<CoursewareListItem> Items { get { return _items; } set { _items = value; RaisePropertyChanged("Items"); } }
在排序觸發時,添加
viewModel.Items.Sort(item => item.UpdateTime, sortingDirection);
列表ListBox、ListView、GridView 排序