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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }