/// <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); }
/// <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); }