diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs index d938153d3c..afbd501fc2 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs +++ b/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) diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs index 66bf70efb4..a3fc24583c 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs +++ b/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); + } } } }