/// <summary> /// Called by the <see cref="EventQueue"/> when the underlying collection has changed. /// </summary> protected virtual void HandlePropertyChanged(object sender, PropertyEventArgs args_) { PropertyCollectionEventArgs args = args_ as PropertyCollectionEventArgs; if ((args == null) || (args.Removed == null && args.Added == null)) { // Behave as if each member were added in sequence. using (Synchronizer.Lock(this.m_Owner.SyncRoot)) { int index = 0; foreach (object member in this.Collection) { this.m_HandlePropertyChangedDispatch.Dispatcher(sender, new PropertyCollectionEventArgs(this.Property, index++, null, member)); } } } else { if (args.Removed != null) { this.TearDownMember(args.Index, args.Removed, this.m_TagTable[args.Removed]); this.m_TagTable.Remove(args.Removed); } if (args.Added != null) { this.m_TagTable[args.Added] = this.SetUpMember(args.Index, args.Added); } } }
/// <summary> /// Called by the <see cref="EventQueue"/> when the underlying collection is about to change. /// </summary> protected virtual void HandlePropertyChanging(object sender, PropertyEventArgs args_) { PropertyCollectionEventArgs args = args_ as PropertyCollectionEventArgs; if ((args == null) || (args.Removed == null && args.Added == null)) { // Behave as if each member were removed from the collection. using (Synchronizer.Lock(this.m_Owner.SyncRoot)) { foreach (object member in this.Collection) { this.m_HandlePropertyChangedDispatch.Dispatcher(sender, new PropertyCollectionEventArgs(this.Property, -1, member, null)); } } } }