为BindingList添加Sort
然而, 默认的BindingList不支持Sort, 需要我们实现。
public class SortableBindingList<T> : BindingList<T> { // Fields private bool isSorted; private ListSortDirection listSortDirection; private PropertyDescriptor propertyDescriptor; // Methods public SortableBindingList() { } public SortableBindingList(IList<T> list) : this() { base.Items.Clear(); foreach (T local in list) { base.Add(local); } } protected override void ApplySortCore(PropertyDescriptor prop, ListSortDirection direction) { (base.Items as List<T>).Sort(this.GetComparisionDelegate(prop, direction)); } private Comparison<T> GetComparisionDelegate(PropertyDescriptor propertyDescriptor, ListSortDirection direction) { return delegate(T t1, T t2) { int num2; ((SortableBindingList<T>)this).propertyDescriptor = propertyDescriptor; ((SortableBindingList<T>)this).listSortDirection = direction; ((SortableBindingList<T>)this).isSorted = true; int num = (direction == ListSortDirection.Ascending) ? 1 : -1; if (propertyDescriptor.PropertyType == typeof(string)) { num2 = StringComparer.CurrentCulture.Compare(propertyDescriptor.GetValue(t1), propertyDescriptor.GetValue(t2)); } else { num2 = Comparer.Default.Compare(propertyDescriptor.GetValue(t1), propertyDescriptor.GetValue(t2)); } return (num * num2); }; } protected override void RemoveSortCore() { this.isSorted = false; this.propertyDescriptor = base.SortPropertyCore; this.listSortDirection = base.SortDirectionCore; } // Properties protected override bool IsSortedCore { get { return this.isSorted; } } protected override ListSortDirection SortDirectionCore { get { return this.listSortDirection; } } protected override PropertyDescriptor SortPropertyCore { get { return this.propertyDescriptor; } } protected override bool SupportsSortingCore { get { return true; } } }
调用RaiseListChangedEvents = false 或者RaiseListChangedEvents = true来控制更改通知,
调用ResetBindings()来全部更新, 或者ResetItem(index)来更新指定索引
https://muzizongheng.blog.csdn.net/