예제 #1
0
        /// <inheritdoc/>
        public override bool TryRecycle(
            int oldIndex,
            int newIndex,
            object item,
            IMemberSelector selector)
        {
            var container = ContainerFromIndex(oldIndex);

            if (container == null)
            {
                throw new IndexOutOfRangeException("Could not recycle container: not materialized.");
            }

            var i = selector != null?selector.Select(item) : item;

            container.SetValue(ContentProperty, i);

            if (!(item is IControl))
            {
                container.DataContext = i;
            }

            var info = MoveContainer(oldIndex, newIndex, i);

            RaiseRecycled(new ItemContainerEventArgs(info));

            return(true);
        }
        /// <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;
        }
예제 #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);
        }
예제 #4
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();
        }
예제 #5
0
        /// <summary>
        /// Creates container controls for a collection of items.
        /// </summary>
        /// <param name="startingIndex">
        /// The index of the first item of the data in the containing collection.
        /// </param>
        /// <param name="items">The items.</param>
        /// <param name="selector">An optional member selector.</param>
        /// <returns>The created container controls.</returns>
        public IList<IControl> CreateContainers(
            int startingIndex,
            IEnumerable items,
            IMemberSelector selector)
        {
            Contract.Requires<ArgumentNullException>(items != null);

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

            foreach (var item in items)
            {
                var i = selector != null ? selector.Select(item) : item;
                var container = CreateContainer(i);
                result.Add(container);
            }

            AddContainers(startingIndex, result);
            _containersInitialized.OnNext(new ItemContainers(startingIndex, result));

            return result.Where(x => x != null).ToList();
        }
예제 #6
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());
        }
예제 #7
0
        /// <inheritdoc/>
        public IEnumerable <IControl> Materialize(
            int startingIndex,
            IEnumerable items,
            IMemberSelector selector)
        {
            Contract.Requires <ArgumentNullException>(items != null);

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

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

                var container = CreateContainer(i);
                result.Add(container);
            }

            AddContainers(startingIndex, result);
            _containersInitialized.OnNext(new ItemContainers(startingIndex, result));

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