Skip to content

Instantly share code, notes, and snippets.

@kristopherjohnson
Created June 23, 2016 23:24
Show Gist options
  • Select an option

  • Save kristopherjohnson/8b9c67601a4445c8a1b1b6c1b600e0ff to your computer and use it in GitHub Desktop.

Select an option

Save kristopherjohnson/8b9c67601a4445c8a1b1b6c1b600e0ff to your computer and use it in GitHub Desktop.
TrulyObservableCollection. Credit: http://stackoverflow.com/a/5256827/1175
public sealed class TrulyObservableCollection<T> : ObservableCollection<T>
where T : INotifyPropertyChanged
{
public TrulyObservableCollection()
{
CollectionChanged += FullObservableCollectionCollectionChanged;
}
public TrulyObservableCollection(IEnumerable<T> pItems) : this()
{
foreach (var item in pItems)
{
this.Add(item);
}
}
private void FullObservableCollectionCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (Object item in e.NewItems)
{
((INotifyPropertyChanged)item).PropertyChanged += ItemPropertyChanged;
}
}
if (e.OldItems != null)
{
foreach (Object item in e.OldItems)
{
((INotifyPropertyChanged)item).PropertyChanged -= ItemPropertyChanged;
}
}
}
private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyCollectionChangedEventArgs args = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender));
OnCollectionChanged(args);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment