diff --git a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs index 96190720ae..20602d5475 100644 --- a/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs +++ b/src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs @@ -155,8 +155,7 @@ namespace Avalonia.Controls.Presenters case NotifyCollectionChangedAction.Add: CreateAndRemoveContainers(); - if (e.NewStartingIndex >= FirstIndex && - e.NewStartingIndex < NextIndex) + if (e.NewStartingIndex < NextIndex) { RecycleContainers(); } diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs index 2f98cccadf..1da9cfce76 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs @@ -206,6 +206,30 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(expected, actual); } + [Fact] + public void Inserting_Items_Before_Visibile_Containers_Should_Update_Containers() + { + var target = CreateTarget(); + + target.ApplyTemplate(); + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(0, 0, 100, 100)); + + ((ILogicalScrollable)target).Offset = new Vector(0, 5); + + var expected = Enumerable.Range(5, 10).Select(x => $"Item {x}").ToList(); + var items = (ObservableCollection)target.Items; + var actual = target.Panel.Children.Select(x => x.DataContext).ToList(); + + Assert.Equal(expected, actual); + + items.Insert(0, "Inserted"); + + expected = Enumerable.Range(4, 10).Select(x => $"Item {x}").ToList(); + actual = target.Panel.Children.Select(x => x.DataContext).ToList(); + Assert.Equal(expected, actual); + } + [Fact] public void Removing_First_Materialized_Item_Should_Update_Containers() { @@ -477,7 +501,6 @@ namespace Avalonia.Controls.UnitTests.Presenters target.Arrange(new Rect(0, 0, 100, 100)); var expected = Enumerable.Range(0, 6).Select(x => $"Item {x}").ToList(); - var items = (ObservableCollection)target.Items; var actual = target.Panel.Children.Select(x => x.DataContext).ToList(); Assert.Equal(expected, actual);