Browse Source

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.
Steven Kirk 9 years ago
parent
commit
2cca250916
1 changed files with 3 additions and 5 deletions
  1. 3 5
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

+ 3 - 5
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);
                 }
             }