public void RemoveItem(VListItemBase itemToBeRemoved) { itemToBeRemoved.IsVLoaded = false; _virtItems.Remove(itemToBeRemoved); _loadedSegment = new Segment(); RearrangeAllItems(); PerformLoadUnload(true); }
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); }