protected override void ClearItems ()
{
EndNew (pending_add_index);
-
+ if (type_raises_item_changed_events) {
+ foreach ( T item in base.Items ) {
+ (item as INotifyPropertyChanged).PropertyChanged -= Item_PropertyChanged;
+ }
+ }
base.ClearItems ();
OnListChanged (new ListChangedEventArgs (ListChangedType.Reset, -1));
if (raise_list_changed_events)
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemAdded, index));
+
+ if (item != null && type_raises_item_changed_events)
+ (item as INotifyPropertyChanged).PropertyChanged += Item_PropertyChanged;
+ }
+
+ void Item_PropertyChanged (object item, PropertyChangedEventArgs args)
+ {
+ OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, base.IndexOf ((T) item)) );
}
protected virtual void OnAddingNew (AddingNewEventArgs e)
throw new NotSupportedException ();
EndNew (pending_add_index);
-
+ if (type_raises_item_changed_events) {
+ (base[index] as INotifyPropertyChanged).PropertyChanged -= Item_PropertyChanged;
+ }
base.RemoveItem (index);
if (raise_list_changed_events)
protected override void SetItem (int index, T item)
{
+ if (type_raises_item_changed_events) {
+ (base[index] as INotifyPropertyChanged).PropertyChanged -= Item_PropertyChanged;
+ (item as INotifyPropertyChanged).PropertyChanged += Item_PropertyChanged;
+ }
base.SetItem (index, item);
OnListChanged (new ListChangedEventArgs (ListChangedType.ItemChanged, index));
}
}
+