예제 #1
0
        /// <summary>
        /// Adds an entry to the index.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="container">The item container.</param>
        public void Add(object item, IControl container)
        {
            _itemToContainer.Add(item, container);
            _containerToItem.Add(container, item);

            Materialized?.Invoke(
                this,
                new ItemContainerEventArgs(0, new ItemContainer(container, item, 0)));
        }
예제 #2
0
        /// <inheritdoc/>
        public ItemContainerInfo Materialize(int index, object item)
        {
            var container = new ItemContainerInfo(CreateContainer(item), item, index);

            _containers.Add(container.Index, container);
            Materialized?.Invoke(this, new ItemContainerEventArgs(container));

            return(container);
        }
예제 #3
0
        /// <inheritdoc/>
        public ItemContainerInfo Materialize(
            int index,
            object item,
            IMemberSelector selector)
        {
            var i = selector != null?selector.Select(item) : item;

            var container = new ItemContainerInfo(CreateContainer(i), item, index);

            _containers.Add(container.Index, container);
            Materialized?.Invoke(this, new ItemContainerEventArgs(container));

            return(container);
        }
        /// <summary>
        /// Adds an entry to the index.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="container">The item container.</param>
        public void Add(object item, IControl container)
        {
            _itemToContainer[item] = container;
            if (_itemToContainerSet.TryGetValue(item, out var set))
            {
                set.Add(container);
            }
            else
            {
                _itemToContainerSet.Add(item, new HashSet <IControl> {
                    container
                });
            }

            _containerToItem.Add(container, item);

            Materialized?.Invoke(
                this,
                new ItemContainerEventArgs(new ItemContainerInfo(container, item, 0)));
        }
예제 #5
0
        /// <inheritdoc/>
        public IEnumerable <ItemContainer> Materialize(
            int startingIndex,
            IEnumerable items,
            IMemberSelector selector)
        {
            Contract.Requires <ArgumentNullException>(items != null);

            int index  = startingIndex;
            var result = new List <ItemContainer>();

            foreach (var item in items)
            {
                var i = selector != null?selector.Select(item) : item;

                var container = new ItemContainer(CreateContainer(i), item, index++);
                result.Add(container);
            }

            AddContainers(result);
            Materialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));

            return(result.Where(x => x != null).ToList());
        }