Example #1
0
        public void RemoveItem(VListItemBase itemToBeRemoved)
        {
            itemToBeRemoved.IsVLoaded = false;


            _virtItems.Remove(itemToBeRemoved);
            _loadedSegment = new Segment();
            RearrangeAllItems();

            PerformLoadUnload(true);
        }
Example #2
0
        public void InsertRemoveItems(int index, List <VListItemBase> itemsToInsert, bool keepItemsBelowIndexFixed = false, VListItemBase itemToRemove = null)
        {
            bool needToAdjustScrollPositionAfterInsertion = false;

            if (keepItemsBelowIndexFixed)
            {
                double totalHeightOfAllItemsBeforeIndex = 0;

                for (int i = 0; i < index; i++)
                {
                    totalHeightOfAllItemsBeforeIndex += VirtItems[i].FixedHeight + VirtItems[i].Margin.Top + VirtItems[i].Margin.Bottom;
                }

                if (totalHeightOfAllItemsBeforeIndex < _scrollViewer.VerticalOffset + _scrollViewer.ViewportHeight)
                {
                    needToAdjustScrollPositionAfterInsertion = true;
                }
            }

            //  UnloadItemsInSegment(_loadedSegment);
            _loadedSegment = new Segment();

            var totalHeight = itemsToInsert.Sum(i => i.FixedHeight + i.Margin.Top + i.Margin.Bottom);

            _virtItems.InsertRange(index, itemsToInsert);

            if (itemToRemove != null)
            {
                itemToRemove.IsVLoaded = false;
                totalHeight           -= itemToRemove.FixedHeight + itemToRemove.Margin.Top + itemToRemove.Margin.Bottom;
                _virtItems.Remove(itemToRemove);
            }


            RearrangeAllItems();


            if (needToAdjustScrollPositionAfterInsertion)
            {
                _changingVerticalOffset = true;
                //Debug.WriteLine("SCROLLING TO " + _scrollViewer.VerticalOffset + totalHeight + " scroll height : " + _scrollViewer.ExtentHeight);
                _scrollViewer.ScrollToVerticalOffset(_scrollViewer.VerticalOffset + totalHeight);
                _changingVerticalOffset = false;
            }

            PerformLoadUnload(false);
        }