private void OnContainerReplacedInItems(IndexedFilterItemContainer <T> newItem, IndexedFilterItemContainer <T> oldItem, int index) { if (newItem.Value && !oldItem.Value) { UpdateIndexes(index, Items.Count); FilteredItems.Insert(newItem.LocalIndex - 1, newItem.Item); } else if (oldItem.Value && !newItem.Value) { UpdateIndexes(index, Items.Count); FilteredItems.RemoveAt(oldItem.LocalIndex - 1); } else { newItem.GlobalIndex = oldItem.GlobalIndex; newItem.LocalIndex = oldItem.LocalIndex; if (newItem.Value) { FilteredItems[newItem.LocalIndex - 1] = newItem.Item; } } oldItem.GlobalIndex = int.MinValue; oldItem.LocalIndex = int.MinValue; }
/// <summary> /// Creates a container for an item that is included in the source collection. /// </summary> /// <param name="item">The item.</param> /// <returns> /// Container for <paramref name="item" />. /// </returns> protected override IndexedFilterItemContainer <T> CreateContainer(T item) { var container = new IndexedFilterItemContainer <T>(item, Filter(item)); container.ValueChanged += ContainerOnIsIncludedChanged; return(container); }
private void OnContainerAddedToItems(IndexedFilterItemContainer <T> item, int index) { UpdateIndexes(index, Items.Count); if (item.Value) { FilteredItems.Insert(item.LocalIndex - 1, item.Item); } }
private void OnContainerRemovedFromItems(IndexedFilterItemContainer <T> item, int index) { UpdateIndexes(index, Items.Count); if (item.Value) { FilteredItems.RemoveAt(item.LocalIndex - 1); } item.LocalIndex = item.GlobalIndex = int.MinValue; }
private void OnContainerMovedInItems(IndexedFilterItemContainer <T> item, int oldIndex, int newIndex) { var oldLocalIndex = item.LocalIndex - 1; if (oldIndex > newIndex) { UpdateIndexes(newIndex, oldIndex + 1); } else { UpdateIndexes(oldIndex, newIndex + 1); } var newLocalIndex = item.LocalIndex - 1; if (item.Value) { FilteredItems.Move(oldLocalIndex, newLocalIndex); } }
/// <summary> /// Destroys a container when it's item is removed from the source collection. /// </summary> /// <param name="container">The container.</param> protected override void DestroyContainer(IndexedFilterItemContainer <T> container) { container.Dispose(); container.ValueChanged -= ContainerOnIsIncludedChanged; }