예제 #1
0
        private void SetDelegateView(ICollectionView collectionView)
        {
            if (delegateView == collectionView)
            {
                return;
            }

            IEnumerable <object> oldItems;

            if (delegateView != null)
            {
                delegateView.CollectionChanged -= OnDelegateViewCollectionChanged;
                delegateView.CurrentChanged    -= OnDelegateViewCurrentChanged;
                oldItems = delegateView.Cast <object>();
            }
            else
            {
                oldItems = new object[0];
            }

            delegateView = collectionView ?? CollectionView.Empty;

            delegateView.CollectionChanged += OnDelegateViewCollectionChanged;
            delegateView.CurrentChanged    += OnDelegateViewCurrentChanged;

            CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Reset(oldItems, delegateView.Cast <object>()));
            CurrentChanged.Raise(this);
        }
예제 #2
0
        protected override void RemoveItem(int index)
        {
            SortDescription sd = base [index];

            base.RemoveItem(index);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Remove, sd, index);
        }
예제 #3
0
 public void Clear()
 {
     List.Clear();
     RaiseCountChanged();
     RaiseItemsChanged();
     CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
 }
예제 #4
0
 public void Insert(int index, T item)
 {
     List.Insert(index, item);
     RaiseCountChanged();
     RaiseItemsChanged();
     CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, index));
 }
예제 #5
0
        public void Change(int year, int monthOfYear)
        {
            var newDayCount = GetNewDayCount(year, monthOfYear);
            var oldDayCount = _dayCount;

            _dayCount = newDayCount;
            foreach (var day in this)
            {
                day.Change(year, monthOfYear);
            }
            var dayCountDifference = Math.Abs(newDayCount - oldDayCount);

            if (oldDayCount < newDayCount)
            {
                var addedItems = new CalendarDay[dayCountDifference];
                Array.Copy(_availableDays, oldDayCount, addedItems, 0, dayCountDifference);
                CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, addedItems, oldDayCount));
            }
            if (oldDayCount > newDayCount)
            {
                var removedItems = new CalendarDay[dayCountDifference];
                Array.Copy(_availableDays, newDayCount, removedItems, 0, dayCountDifference);
                CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, removedItems, newDayCount));
            }
        }
예제 #6
0
 public void Add(T item)
 {
     List.Add(item);
     RaiseCountChanged();
     RaiseItemsChanged();
     CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, List.Count - 1));
 }
예제 #7
0
        public void Add(UIElement item)
        {
            children.Add(item);
            SetChildParent(item);

            CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Add(item, children.Count));
        }
예제 #8
0
        public UIElement this[int index]
        {
            get { return(children[index]); }
            set
            {
                if (children[index] == value)
                {
                    return;
                }

                NotifyCollectionChangedEventArgs args = NotifyCollectionChangedEventArgs.Replace(children[index], value, index);

                if (children[index] != null)
                {
                    ClearChildParent(children[index]);
                }

                children[index] = value;

                if (children[index] != null)
                {
                    SetChildParent(children[index]);
                }

                CollectionChanged.Raise(this, args);
            }
        }
예제 #9
0
        public void Insert(int index, UIElement item)
        {
            children.Insert(index, item);
            SetChildParent(item);

            CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Add(item, index));
        }
예제 #10
0
        private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            foreach (T value in e.OldItems)
            {
                if (value is IContextElement)
                {
                    ((IContextElement)value).TrySetContextParent(null);
                }

                if (value is INotifyChanged)
                {
                    ((INotifyChanged)value).Changed -= OnItemChanged;
                }
            }

            foreach (T value in e.NewItems)
            {
                if (value is IContextElement)
                {
                    ((IContextElement)value).TrySetContextParent(this);
                }

                if (value is INotifyChanged)
                {
                    ((INotifyChanged)value).Changed += OnItemChanged;
                }
            }

            CollectionChanged.Raise(this, e);
            RaiseChanged();
        }
예제 #11
0
        void AddInSubtree(StandardCollectionViewGroup group, object item, CultureInfo culture, IList <GroupDescription> descriptions, bool allowSorting)
        {
            int depth = group.Depth;

            if (group.IsBottomLevel)
            {
                group.AddItem(item, allowSorting, WrappedList);
                CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, IndexOfSubtree(item)));
            }
            else
            {
                var desc       = descriptions [group.Depth];
                var groupNames = desc.GroupNameFromItem(item, group.Depth, culture);
                if (groupNames is IList)
                {
                    foreach (var name in (IList)groupNames)
                    {
                        AddInSubtree(group, item, culture, descriptions, allowSorting, name);
                    }
                }
                else
                {
                    AddInSubtree(group, item, culture, descriptions, allowSorting, groupNames);
                }
            }
        }
예제 #12
0
        private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            foreach (T value in e.OldItems)
            {
                value.SetInheritanceParent(null);

                if (value is Freezable)
                {
                    (value as Freezable).Changed -= OnItemChanged;
                }
            }

            foreach (T value in e.NewItems)
            {
                value.SetInheritanceParent(this);

                if (value is Freezable)
                {
                    (value as Freezable).Changed += OnItemChanged;
                }
            }

            CollectionChanged.Raise(this, e);
            RaiseChanged();
        }
        protected override void InsertItem(int index, TItem item)
        {
            base.InsertItem(index, item);

            PropertyChanged.Raise(this, IndexerName);
            PropertyChanged.Raise(this, CountString);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Add, item, index);
        }
예제 #14
0
        public void Clear()
        {
            NotifyCollectionChangedEventArgs e = NotifyCollectionChangedEventArgs.RemoveRange(items.Cast <object>().ToArray(), 0);

            items.Clear();
            CollectionChanged.Raise(this, e);
            PropertyChanged.Raise(this, CountPropertyChangedEventArgs);
        }
예제 #15
0
 private void collection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     attemptsToRaiseChanged++;
     if (raiseEvents)
     {
         CollectionChanged.Raise(this, e);
     }
 }
예제 #16
0
        public void RemoveAt(int index)
        {
            NotifyCollectionChangedEventArgs e = NotifyCollectionChangedEventArgs.Remove(items[index], index);

            items.RemoveAt(index);
            CollectionChanged.Raise(this, e);
            PropertyChanged.Raise(this, CountPropertyChangedEventArgs);
        }
예제 #17
0
 public void EndUpdate()
 {
     raiseEvents = true;
     if (attemptsToRaiseChanged > 0)
     {
         CollectionChanged.Raise(this);
     }
 }
예제 #18
0
 public T this[int index] {
     get { return(List [index]); }
     set {
         var old = List[index];
         List[index] = value;
         RaiseItemsChanged();
         CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, old, value, index));
     }
 }
예제 #19
0
        public void RemoveAt(int index)
        {
            var old = List[index];

            List.RemoveAt(index);
            RaiseCountChanged();
            RaiseItemsChanged();
            CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, old, index));
        }
예제 #20
0
 public T this[int index]
 {
     get { return(array[(startIndex + index) % capacity]); }
     set
     {
         array[(startIndex + index) % capacity] = value;
         CollectionChanged.Raise(this);
     }
 }
        protected override void SetItem(int index, TItem item)
        {
            var originalItem = this[index];

            base.SetItem(index, item);

            PropertyChanged.Raise(this, IndexerName);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Replace, originalItem, item, index);
        }
예제 #22
0
        protected override void SetItem(int index, SortDescription item)
        {
            SortDescription old = base [index];

            item.Seal();
            base.SetItem(index, item);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Remove, old, index);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Add, item, index);
        }
예제 #23
0
        private void OnSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            object[] oldInnerCollection = innerCollection;

            innerCollection = TranslateCollection(SourceCollection.Cast <object>(), filterPredicate, sortKeySelector, sortDirection).ToArray();

            if (innerCollection.Contains(CurrentItem))
            {
                SetCurrent(CurrentItem);
            }
            else
            {
                SetCurrent(CurrentItemIndex >= oldInnerCollection.Length ? innerCollection.Length : CurrentItemIndex);
            }

            IEnumerable <object> oldItems = e.OldItems.Intersect(oldInnerCollection).ToArray();
            IEnumerable <object> newItems = e.NewItems.Intersect(innerCollection).ToArray();

            if (oldItems.Count() > 1 || newItems.Count() > 1)
            {
                CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Reset(oldInnerCollection, innerCollection));
                return;
            }

            object oldItem  = e.OldItems.FirstOrDefault();
            int    oldIndex = Granular.Compatibility.Array.FindIndex(oldInnerCollection, item => Granular.Compatibility.EqualityComparer <object> .Default.Equals(item, oldItem));

            object newItem  = e.NewItems.FirstOrDefault();
            int    newIndex = Granular.Compatibility.Array.FindIndex(innerCollection, item => Granular.Compatibility.EqualityComparer <object> .Default.Equals(item, newItem));

            if (oldIndex == -1 && newIndex == -1 || oldItem == newItem && oldIndex == newIndex)
            {
                return;
            }

            if (Granular.Compatibility.EqualityComparer <object> .Default.Equals(oldItem, newItem))
            {
                CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Move(newItem, oldIndex, newIndex));
            }
            else if (oldIndex == newIndex)
            {
                CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Replace(oldItem, newItem, newIndex));
            }
            else
            {
                if (oldIndex != -1)
                {
                    CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Remove(oldItem, oldIndex));
                }

                if (newIndex != -1)
                {
                    CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.Add(newItem, newIndex));
                }
            }
        }
        protected override void RemoveItem(int index)
        {
            var item = this[index];

            base.RemoveItem(index);

            PropertyChanged.Raise(this, IndexerName);
            PropertyChanged.Raise(this, CountString);
            CollectionChanged.Raise(this, NotifyCollectionChangedAction.Remove, item);
        }
예제 #25
0
        internal void ClearSubtree()
        {
            ProtectedItems.Clear();
            CollectionChanged.Raise(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
            return;
//			if (IsBottomLevel) {
//				ClearItems ();
//			} else {
//				foreach (StandardCollectionViewGroup g in Items)
//					g.ClearSubtree ();
//			}
        }
예제 #26
0
        public void Clear()
        {
            ThrowIfInHandler();
            try {
                InHandler = true;

                Mono.NativeMethods.collection_clear(native);
                CollectionChanged.Raise(this, NotifyCollectionChangedAction.Reset);
            } finally {
                InHandler = false;
            }
        }
예제 #27
0
        public void Clear()
        {
            IEnumerable <UIElement> lastChildren = children.ToArray();

            children.Clear();

            foreach (UIElement child in lastChildren)
            {
                ClearChildParent(child);
            }

            CollectionChanged.Raise(this, NotifyCollectionChangedEventArgs.RemoveRange(lastChildren, 0));
        }
예제 #28
0
        public void RemoveAt(int index)
        {
            ThrowIfInHandler();
            try {
                InHandler = true;

                var oldItem = this [index];
                Mono.NativeMethods.collection_remove_at(native, index);
                CollectionChanged.Raise(this, NotifyCollectionChangedAction.Remove, oldItem, index);
            } finally {
                InHandler = false;
            }
        }
예제 #29
0
 private void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
 {
     OnPropertyChanged("Count");
     OnPropertyChanged("Item[]");
     try
     {
         CollectionChanged.Raise(this, e);
     }
     catch (NotSupportedException)
     {
         OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
     }
 }
예제 #30
0
        public void Insert(int index, T item)
        {
            ThrowIfInHandler();
            try {
                InHandler = true;

                Value v;
                using ((v = Value.FromObject(item)))
                    Mono.NativeMethods.collection_insert(native, index, ref v);
                CollectionChanged.Raise(this, NotifyCollectionChangedAction.Add, item, index);
            } finally {
                InHandler = false;
            }
        }