public ListChangedEventArgs OnCollectionChanged( object sender, CollectionChangeEventArgs e, ObjectViewListener listener) { ListChangedEventArgs changedEventArgs = (ListChangedEventArgs)null; switch (e.Action) { case CollectionChangeAction.Add: if (e.Element is TViewElement && !this._itemCommitPending) { TViewElement element = (TViewElement)e.Element; this._bindingList.Add(element); listener.RegisterEntityEvents((object)element); changedEventArgs = new ListChangedEventArgs(ListChangedType.ItemAdded, this._bindingList.Count - 1, -1); break; } break; case CollectionChangeAction.Remove: if (e.Element is TViewElement) { TViewElement element = (TViewElement)e.Element; int newIndex = this._bindingList.IndexOf(element); if (newIndex != -1) { this._bindingList.Remove(element); listener.UnregisterEntityEvents((object)element); changedEventArgs = new ListChangedEventArgs(ListChangedType.ItemDeleted, newIndex, -1); break; } break; } break; case CollectionChangeAction.Refresh: foreach (TViewElement binding in this._bindingList) { listener.UnregisterEntityEvents((object)binding); } this._bindingList.Clear(); foreach (TViewElement viewElement in this._entityCollection.GetInternalEnumerable()) { this._bindingList.Add(viewElement); listener.RegisterEntityEvents((object)viewElement); } changedEventArgs = new ListChangedEventArgs(ListChangedType.Reset, -1, -1); break; } return(changedEventArgs); }
object IBindingList.AddNew() { EnsureWritableList(); if (IsElementTypeAbstract) { throw new InvalidOperationException(Strings.ObjectView_AddNewOperationNotAllowedOnAbstractBindingList); } _viewData.EnsureCanAddNew(); ((ICancelAddNew)this).EndNew(_addNewIndex); var newItem = (TElement)Activator.CreateInstance(typeof(TElement)); _addNewIndex = _viewData.Add(newItem, true); _listener.RegisterEntityEvents(newItem); OnListChanged(ListChangedType.ItemAdded, _addNewIndex /* newIndex*/, -1 /*oldIndex*/); return(newItem); }
public ListChangedEventArgs OnCollectionChanged(object sender, CollectionChangeEventArgs e, ObjectViewListener listener) { ListChangedEventArgs changeArgs = null; switch (e.Action) { case CollectionChangeAction.Remove: // An Entity is being removed from entity collection, remove it from list. if (e.Element is TViewElement) { var removedItem = (TViewElement)e.Element; var oldIndex = _bindingList.IndexOf(removedItem); if (oldIndex != -1) { _bindingList.Remove(removedItem); // Unhook from events of removed entity. listener.UnregisterEntityEvents(removedItem); changeArgs = new ListChangedEventArgs(ListChangedType.ItemDeleted, oldIndex /* newIndex*/, -1 /* oldIndex*/); } } break; case CollectionChangeAction.Add: // Add the entity to our list. if (e.Element is TViewElement) { // Do not process Add events that fire as a result of committing an item to the entity collection. if (!_itemCommitPending) { var addedItem = (TViewElement)e.Element; _bindingList.Add(addedItem); // Register to its events. listener.RegisterEntityEvents(addedItem); changeArgs = new ListChangedEventArgs( ListChangedType.ItemAdded, _bindingList.Count - 1 /* newIndex*/, -1 /* oldIndex*/); } } break; case CollectionChangeAction.Refresh: foreach (var entity in _bindingList) { listener.UnregisterEntityEvents(entity); } _bindingList.Clear(); foreach (TViewElement entity in _entityCollection.GetInternalEnumerable()) { _bindingList.Add(entity); listener.RegisterEntityEvents(entity); } changeArgs = new ListChangedEventArgs(ListChangedType.Reset, -1 /*newIndex*/, -1 /*oldIndex*/); break; } return(changeArgs); }