| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SKMC.Api.Common.Types
- {
- /// <summary>
- /// Expanded ObservableCollection to include some List<T> Methods
- /// </summary>
- [Serializable]
- public class ObservableCollectionEx<T> : ObservableCollection<T>
- {
- /// <summary>
- /// Constructors
- /// </summary>
- public ObservableCollectionEx() : base() { }
- public ObservableCollectionEx(List<T> l) : base(l) { }
- public ObservableCollectionEx(IEnumerable<T> l) : base(l) { }
- /// <summary>
- /// Sorts the items of the collection in multiply keys.
- /// </summary>
- /// <param name="sortExpressions"></param>
- public void Sort(params (Func<T, object> keySelector, bool ascending)[] sortExpressions)
- {
- if (sortExpressions == null || sortExpressions.Length == 0)
- return;
- // Get the sorted items as a list
- var sortedItems = this.ToList();
- IOrderedEnumerable<T> orderedEnumerable = null;
- for (int i = 0; i < sortExpressions.Length; i++)
- {
- var sortExpression = sortExpressions[i];
- if (i == 0)
- {
- orderedEnumerable = sortExpression.ascending
- ? sortedItems.OrderBy(sortExpression.keySelector)
- : sortedItems.OrderByDescending(sortExpression.keySelector);
- }
- else
- {
- orderedEnumerable = sortExpression.ascending
- ? orderedEnumerable.ThenBy(sortExpression.keySelector)
- : orderedEnumerable.ThenByDescending(sortExpression.keySelector);
- }
- }
- sortedItems = orderedEnumerable.ToList();
- // Reorder the collection using Move
- for (int i = 0; i < sortedItems.Count; i++)
- {
- var item = sortedItems[i];
- var currentIndex = IndexOf(item);
- if (currentIndex != i)
- {
- Move(currentIndex, i);
- }
- }
- }
- }
- }
|