码迷,mamicode.com
首页 > 编程语言 > 详细

列表ListBox、ListView、GridView 排序

时间:2017-09-10 21:38:57      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:stc   hang   orderby   sep   ase   select   null   ble   class   

列表排序

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 排序

标签:stc   hang   orderby   sep   ase   select   null   ble   class   

原文地址:http://www.cnblogs.com/kybs0/p/7502282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!