private void RemoveItems(IEnumerable <T> itemsToRemove, ObservedCollection <T> observedCollection) { foreach (var item in itemsToRemove) { RemovePrivate(item, observedCollection); } }
private void AddItems(IEnumerable <T> items, ObservedCollection <T> observedCollection) { if (observedCollection.AddFilter == null) { foreach (T item in items) { AddPrivate(item, observedCollection); } } }
/// <summary> /// Decrements an item's reference count and if it's reached zero, removes it from the main collection. /// </summary> private void RemovePrivate(T item, ObservedCollection <T> observedCollection) { var observedItem = _observedItems.FirstOrDefault(i => i.Item == item); if (observedItem != null) { observedItem.Sources.Remove(observedCollection); if (observedItem.Sources.Count > 0) { return; } } Remove(item); }
/// <summary> /// Adds an item to the merged collection and increments its reference count. /// </summary> private void AddPrivate(T item, ObservedCollection <T> observedCollection) { if (!Contains(item)) { Add(item); } var observedItem = _observedItems.FirstOrDefault(i => i.Item == item); if (observedItem == null) { observedItem = new ObservedItem <T>(item); _observedItems.Add(observedItem); } observedItem.Sources.Add(observedCollection); }
/// <summary> /// Registers an ObservableCollection and adds all filtered members to the MergedObservableCollection. /// </summary> /// <param name="collection">The collection to observe for additions and deletions.</param> public void RegisterObservedCollection(INotifyCollectionChanged collection) { var observedCollection = _observedCollections.FirstOrDefault(oc => oc.ObservableCollection == collection); if (observedCollection == null) { observedCollection = new ObservedCollection <T> { ObservableCollection = collection }; _observedCollections.Add(observedCollection); collection.CollectionChanged += observedCollection_CollectionChanged; var items = collection as IEnumerable; if (items != null) { AddItems(items.Cast <T>(), observedCollection); } } }