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); }
public ListChangedEventArgs OnCollectionChanged( object sender, CollectionChangeEventArgs e, ObjectViewListener listener) { ListChangedEventArgs changedEventArgs = (ListChangedEventArgs)null; if (e.Element.GetType().IsAssignableFrom(typeof(TElement)) && this._bindingList.Contains((TElement)e.Element)) { TElement element = (TElement)e.Element; int newIndex = this._bindingList.IndexOf(element); if (newIndex >= 0 && e.Action == CollectionChangeAction.Remove) { this._bindingList.Remove(element); listener.UnregisterEntityEvents((object)element); changedEventArgs = new ListChangedEventArgs(ListChangedType.ItemDeleted, newIndex, -1); } } return(changedEventArgs); }
public ListChangedEventArgs OnCollectionChanged(object sender, CollectionChangeEventArgs e, ObjectViewListener listener) { ListChangedEventArgs changeArgs = null; // Since event is coming from cache and it might be shared among different queries // we have to check to see if correct event is being handled. if (e.Element.GetType().IsAssignableFrom(typeof(TElement)) && _bindingList.Contains((TElement)(e.Element))) { var item = (TElement)e.Element; var itemIndex = _bindingList.IndexOf(item); if (itemIndex >= 0) // Ignore entities that we don't know about. { // Only process "remove" events. Debug.Assert(e.Action != CollectionChangeAction.Refresh, "Cache should never fire with refresh, it does not have clear"); if (e.Action == CollectionChangeAction.Remove) { _bindingList.Remove(item); listener.UnregisterEntityEvents(item); changeArgs = new ListChangedEventArgs(ListChangedType.ItemDeleted, itemIndex /* newIndex*/, -1 /* oldIndex*/); } } } return(changeArgs); }
internal ObjectView(IObjectViewData <TElement> viewData, object eventDataSource) { this._viewData = viewData; this._listener = new ObjectViewListener((IObjectView)this, (IList)this._viewData.List, eventDataSource); }
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); }