diff --git a/src/Avalonia.Controls/VirtualizingStackPanel.cs b/src/Avalonia.Controls/VirtualizingStackPanel.cs index 840ed06c73..6daad0b90e 100644 --- a/src/Avalonia.Controls/VirtualizingStackPanel.cs +++ b/src/Avalonia.Controls/VirtualizingStackPanel.cs @@ -74,7 +74,6 @@ namespace Avalonia.Controls protected override Size ArrangeOverride(Size finalSize) { - _availableSpace = finalSize; _canBeRemoved = 0; _takenSpace = 0; _averageItemSize = 0; diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs index 2f6361a867..02dffdead6 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Avalonia.Collections; using Avalonia.Controls.Generators; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs index 8390ec6c03..02c415d068 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs @@ -658,6 +658,40 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(expected, actual); } + public void Should_Add_Containers_For_Items_After_Clear() + { + var target = CreateTarget(itemCount: 10); + var defaultItems = (IList)target.Items; + var items = new AvaloniaList(defaultItems); + target.Items = items; + + target.ApplyTemplate(); + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(target.DesiredSize)); + + Assert.Equal(10, target.Panel.Children.Count); + + items.Clear(); + + target.Panel.Measure(new Size(100, 100)); + target.Panel.Arrange(new Rect(target.Panel.DesiredSize)); + + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(target.DesiredSize)); + + Assert.Equal(0, target.Panel.Children.Count); + + items.AddRange(defaultItems.Select(s => s + " new")); + + target.Panel.Measure(new Size(100, 100)); + target.Panel.Arrange(new Rect(target.Panel.DesiredSize)); + + target.Measure(new Size(100, 100)); + target.Arrange(new Rect(target.DesiredSize)); + + Assert.Equal(10, target.Panel.Children.Count); + } + public class Vertical { [Fact]