public class ObservableCollectionBase : ObservableCollection where T : INotifyPropertyChanged { public ObservableCollectionBase() { this.CollectionChanged += CurrentObservableCollectionChanged; } void CurrentObservableCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { foreach (T item in e.NewItems) { item.PropertyChanged += ItemPropertyChanged; } } else if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (T item in e.OldItems) { item.PropertyChanged -= ItemPropertyChanged; } } } void ItemPropertyChanged(object sender, PropertyChangedEventArgs e) { NotifyCollectionChangedEventArgs evarg = new NotifyCollectionChangedEventArgs( NotifyCollectionChangedAction.Replace, sender, sender); this.OnCollectionChanged(evarg); } }