Browse Source

Make scrolling up >= 1 page work

Steven Kirk 9 years ago
parent
commit
55f05defd1

+ 2 - 2
src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

@@ -135,9 +135,9 @@ namespace Avalonia.Controls.Presenters
             var generator = Owner.ItemContainerGenerator;
             var selector = Owner.MemberSelector;
             var sign = delta < 0 ? -1 : 1;
-            var move = delta < panel.Children.Count;
-            var first = delta < 0 && move ? panel.Children.Count + delta : 0;
             var count = Math.Min(Math.Abs(delta), panel.Children.Count);
+            var move = count < panel.Children.Count;
+            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)

+ 10 - 0
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs

@@ -248,6 +248,16 @@ namespace Avalonia.Controls.UnitTests.Presenters
                     {
                         Assert.Equal(items[i + 20], target.Panel.Children[i].DataContext);
                     }
+
+                    scroller.Offset = new Vector(0, 0);
+
+                    Assert.Equal(new Vector(0, 0), ((ILogicalScrollable)target).Offset);
+                    Assert.Equal(containers, target.Panel.Children);
+
+                    for (var i = 0; i < target.Panel.Children.Count; ++i)
+                    {
+                        Assert.Equal(items[i], target.Panel.Children[i].DataContext);
+                    }
                 }
             }
         }