From 2cca2509161aa926a8ba1f0ed303070bcf90bec5 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 4 Jun 2016 14:13:23 +0200 Subject: [PATCH] Move items in panel Children collection Instead of removing and re-adding them as this causes a removal and re-addition to the logical tree, with all the overhead that involves. --- src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs index 69141fdbea..7750ed7f4a 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs +++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs @@ -258,7 +258,7 @@ namespace Avalonia.Controls.Presenters var first = delta < 0 && move ? panel.Children.Count + delta : 0; var containers = panel.Children.GetRange(first, count).ToList(); - for (var i = 0; i < containers.Count; ++i) + for (var i = 0; i < count; ++i) { var oldItemIndex = FirstIndex + first + i; var newItemIndex = oldItemIndex + delta + ((panel.Children.Count - count) * sign); @@ -273,15 +273,13 @@ namespace Avalonia.Controls.Presenters if (move) { - panel.Children.RemoveRange(first, count); - if (delta > 0) { - panel.Children.AddRange(containers); + panel.Children.MoveRange(first, count, panel.Children.Count); } else { - panel.Children.InsertRange(0, containers); + panel.Children.MoveRange(first, count, 0); } }