Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
 private void OnContainerAddedToItems(IndexedFilterItemContainer <T> item, int index)
 {
     UpdateIndexes(index, Items.Count);
     if (item.Value)
     {
         FilteredItems.Insert(item.LocalIndex - 1, item.Item);
     }
 }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
 /// <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;
 }