Browse Source

Add containers on Items reset.

If new items have been added on Reset and the panel was not previously
full, then create containers for the new items. Fixes #561.
pull/569/head
Steven Kirk 10 years ago
parent
commit
63c2cd41fd
  1. 1
      src/Avalonia.Controls/Presenters/ItemVirtualizerSimple.cs
  2. 44
      tests/Avalonia.Controls.UnitTests/Presenters/ItemsPresenterTests_Virtualization_Simple.cs

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

@ -135,6 +135,7 @@ namespace Avalonia.Controls.Presenters
case NotifyCollectionChangedAction.Reset:
RecycleContainersOnRemove();
CreateAndRemoveContainers();
break;
}
}

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

@ -372,6 +372,50 @@ namespace Avalonia.Controls.UnitTests.Presenters
Assert.Empty(target.Panel.Children);
}
[Fact]
public void Reassigning_Items_Should_Create_Containers()
{
var target = CreateTarget(itemCount: 5);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 5).Select(x => $"Item {x}").ToList();
var items = (ObservableCollection<string>)target.Items;
var actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
expected = Enumerable.Range(0, 6).Select(x => $"Item {x}").ToList();
target.Items = expected;
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
[Fact]
public void Reassigning_Items_Should_Remove_Containers()
{
var target = CreateTarget(itemCount: 5);
target.ApplyTemplate();
target.Measure(new Size(100, 100));
target.Arrange(new Rect(0, 0, 100, 100));
var expected = Enumerable.Range(0, 5).Select(x => $"Item {x}").ToList();
var items = (ObservableCollection<string>)target.Items;
var actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
expected = Enumerable.Range(0, 4).Select(x => $"Item {x}").ToList();
target.Items = expected;
actual = target.Panel.Children.Select(x => x.DataContext).ToList();
Assert.Equal(expected, actual);
}
public class Vertical
{
[Fact]

Loading…
Cancel
Save