Adding items to a sorted observablecollection
c#, observablecollection, sorting, win-universal-app, windows-phone-8.1
Solution
First of, don't us `set`ters for your lists. That way, you can control how items are added to your list.
There are ways to sort items for an ObservableCollection via an `CollectionViewSource`. You can read about that here.
Another solution would be to expose your list as an `IEnumerable<Push>`
public IEnumerable<Push> Pushes // no Add method on IEnumerable
{
get { return Settings.PushCol; }
}
Then implement an `Add` method in your class, which controls how items are added.
public void Add(Push p){
int i = 0;
for (; i < Settings.PushCol.Count; i++)
{
if (Settings.PushCol[i].Created > p.Created)
break;
}
Settings.PushCol.Insert(i, p);
}
Problem
I have a list of items that need to be sorted by date, So what I'm doing is the following (I'm binding an `ItemsControl` to `Pushes`: ``` public ObservableCollection<Push> Pushes { get { return Settings.PushCol; } set { Settings.PushCol = value; OnPropertyChanged("Pushes"); } } Pushes = new ObservableCollection<Push>( Settings.PushCol .Where(push => push.Active == true) .OrderByDescending(push => push.Created) ); ``` The problem here is if I were to add to `Pushes`, I would have to resort my `Pushes` using the code above, the issue this causes is that if I have a large collection it will freeze the UI until the collection has been updated. I'm trying to find a better way to do this, can anyone advise me on what would be the best practice here?