zoukankan      html  css  js  c++  java
  • 列表ListBox、ListView、GridView 排序

    列表排序

    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);

    值得注意的是:异步线程高度当前主UI线程时,ObservableCollection列表是不支持重新排序的。

    关键字:列表排序,CollectionViewSource,ObservableCollection,异步线程对列表排序

  • 相关阅读:
    静态构造函数(C# 编程指南)
    SQL SERVER2008 存储过程、表、视图、函数的权限
    EF架构~为EF DbContext生成的实体添加注释 【转】
    WebBrowser 多线程问题,寻求解答!(已经搞清楚!) 【转】
    EF架构~将数据库注释添加导入到模型实体类中 【转】
    window.name web开发iframe 跨域间的值传输问题
    javascript 验证 国际格式 电话号码
    认识HTML5的WebSocket
    Jquery 滚屏
    哎 为了自己的生活能过的去 从今天起开始写技术博客 请大家多多指教
  • 原文地址:https://www.cnblogs.com/kybs0/p/7502282.html
Copyright © 2011-2022 走看看