Browse Source

Make adding items work.

When virtualizing panel is not yet full.
pull/567/merge
Steven Kirk 10 years ago
parent
commit
04c48bbd54
  1. 3
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
  2. 17
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

3
src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs

@ -110,10 +110,11 @@ namespace Avalonia.Controls.Presenters
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
CreateAndRemoveContainers();
if (e.NewStartingIndex >= FirstIndex &&
e.NewStartingIndex + e.NewItems.Count <= NextIndex)
{
CreateAndRemoveContainers();
RecycleContainers();
}

17
tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

@ -62,6 +62,23 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Equal(new Size(10, 0), ((ILogicalScrollable)target).Viewport);
}
[Fact]
public void Should_Add_Containers_When_Panel_Is_Not_Full()
{
var target = CreateTarget(itemCount: 5);
var items = (IList<string>)target.Items;
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
Assert.Equal(5, target.Panel.Children.Count);
items.Add("New Item");
Assert.Equal(6, target.Panel.Children.Count);
}
[Fact]
public void Should_Remove_Items_When_Control_Is_Shrank()
{

Loading…
Cancel
Save