After long and long searching i found this code, and i report it here so it can be useful for readers too.
/* /* * samples: * //sort ascending * MySortableList.Sort(x => x.Name, ListSortDirection.Ascending); * * //sort descending * MySortableList.Sort(x => x.Name, ListSortDirection.Descending); */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.ObjectModel; namespace TestSortableCollection { public class SortableObservableCollection: ObservableCollection { public void Sort (Func 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 (Func keySelector, IComparer comparer) { ApplySort(Items.OrderBy(keySelector, comparer)); } private void ApplySort(IEnumerable sortedItems) { var sortedItemsList = sortedItems.ToList(); foreach (var item in sortedItemsList) { Move(IndexOf(item), sortedItemsList.IndexOf(item)); } } } }
Use it in this way:
public class Person { public string Name{get;set;} public int Age {get;set;} } public class PersonCollection:SortableObservableCollection{ public PersonCollection() { [...fill collection...] this.Sort(x => x.Name, ListSortDirection.Ascending); } }
No comments:
Post a Comment