/// <summary>
        /// Unregisters action from each added and removed item.
        /// </summary>
        /// <param name="handler">Action which will be invoked for each added and removed item.</param>
        /// <param name="runForExistingItems">Indicated if <paramref name="handler"/> will be invoked for existing items.</param>
        public void UnregisterHandler(ItemHandlerDelegate <T> handler, bool runForExistingItems = false)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            if (!_handlers.Remove(handler) || !runForExistingItems)
            {
                return;
            }


            var array = this.ToArray();

            for (var index = 0; index < array.Length; index++)
            {
                var item = array[index];

                try
                {
                    RunHandlerForItem(handler, false, item, index);
                }
                catch { /* NEPP-1432 - Sometimes on finalizing throws exception in handler. */ }
            }
        }
        /// <summary>
        /// Registers action for each added and removed item.
        /// </summary>
        /// <param name="handler">Action which will be invoked for each added and removed item.</param>
        /// <param name="runForExistingItems">Indicated if <paramref name="handler"/> will be invoked for existing items.</param>
        public void RegisterHandler(ItemHandlerDelegate <T> handler, bool runForExistingItems = false)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            _handlers.Add(handler);

            if (!runForExistingItems)
            {
                return;
            }

            var array = this.ToArray();

            for (var index = 0; index < array.Length; index++)
            {
                var item = array[index];
                RunHandlerForItem(handler, true, item, index);
            }
        }
 protected virtual void RunHandlerForItem(ItemHandlerDelegate <T> handler, bool inserted, T item, int index)
 {
     handler?.Invoke(inserted, item, index);
 }
示例#4
0
 /// <summary>
 /// Unregisters action from each added and removed item.
 /// </summary>
 /// <param name="handler">Action which will be invoked for each added and removed item.</param>
 /// <param name="runForExistingItems">Indicated if <paramref name="handler"/> will be invoked for existing items.</param>
 public void UnregisterHandler(ItemHandlerDelegate <T> handler, bool runForExistingItems = false)
 {
     _observableCollectionWrap.UnregisterHandler(handler, runForExistingItems);
 }