瀏覽代碼

Merge PR #643

Conflicts:
	tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs
Steven Kirk 9 年之前
父節點
當前提交
c8f175474e

+ 0 - 1
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;

+ 1 - 0
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;

+ 34 - 0
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<string>)target.Items;
+            var items = new AvaloniaList<string>(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]