|
|
@@ -10,6 +10,7 @@ using Avalonia.Styling;
|
|
|
using Avalonia.UnitTests;
|
|
|
using Avalonia.VisualTree;
|
|
|
using Xunit;
|
|
|
+using Avalonia.Collections;
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests
|
|
|
{
|
|
|
@@ -152,6 +153,40 @@ namespace Avalonia.Controls.UnitTests
|
|
|
Assert.False(((ListBoxItem)target.Presenter.Panel.Children[0]).IsSelected);
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void ListBox_Virt_None_Should_Sync_Items_When_Inserted_Or_Removed()
|
|
|
+ {
|
|
|
+ var items = new AvaloniaList<string>(Enumerable.Range(0, 5).Select(x => $"Item {x}"));
|
|
|
+ var toAdd = Enumerable.Range(0, 3).Select(x => $"Added Item {x}").ToArray();
|
|
|
+ var target = new ListBox
|
|
|
+ {
|
|
|
+ Template = ListBoxTemplate(),
|
|
|
+ VirtualizationMode = ItemVirtualizationMode.None,
|
|
|
+ Items = items,
|
|
|
+ ItemTemplate = new FuncDataTemplate<string>(x => new TextBlock { Height = 10 }),
|
|
|
+ SelectedIndex = 0,
|
|
|
+ };
|
|
|
+
|
|
|
+ Prepare(target);
|
|
|
+
|
|
|
+ Assert.Equal(items.Count, target.Presenter.Panel.Children.Count);
|
|
|
+
|
|
|
+ int addIndex = 1;
|
|
|
+ foreach(var item in toAdd)
|
|
|
+ {
|
|
|
+ items.Insert(addIndex++, item);
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Equal(items.Count, target.Presenter.Panel.Children.Count);
|
|
|
+
|
|
|
+ foreach (var item in toAdd)
|
|
|
+ {
|
|
|
+ items.Remove(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ Assert.Equal(items.Count, target.Presenter.Panel.Children.Count);
|
|
|
+ }
|
|
|
+
|
|
|
private FuncControlTemplate ListBoxTemplate()
|
|
|
{
|
|
|
return new FuncControlTemplate<ListBox>(parent =>
|