Browse Source

Add test to ensure SelectedIndex / SelectedItem is maintained when

items are removed mid-list.
pull/1639/head
Dan Walmsley 8 years ago
parent
commit
2900333f69
  1. 2
      src/Avalonia.Controls/Presenters/CarouselPresenter.cs
  2. 28
      tests/Avalonia.Controls.UnitTests/CarouselTests.cs

2
src/Avalonia.Controls/Presenters/CarouselPresenter.cs

@ -115,7 +115,7 @@ namespace Avalonia.Controls.Presenters
var containers = generator.RemoveRange(e.OldStartingIndex, e.OldItems.Count);
Panel.Children.RemoveAll(containers.Select(x => x.ContainerControl));
MoveToPage(-1, 0);
MoveToPage(-1, SelectedIndex);
}
break;

28
tests/Avalonia.Controls.UnitTests/CarouselTests.cs

@ -167,6 +167,34 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal("Bar", ((TextBlock)child).Text);
}
[Fact]
public void Selected_Item_Changes_To_NextAvailable_Item_If_SelectedItem_Is_Removed_From_Middle()
{
var items = new ObservableCollection<string>
{
"Foo",
"Bar",
"FooBar"
};
var target = new Carousel
{
Template = new FuncControlTemplate<Carousel>(CreateTemplate),
Items = items,
IsVirtualized = false
};
target.ApplyTemplate();
target.Presenter.ApplyTemplate();
target.SelectedIndex = 1;
items.RemoveAt(1);
Assert.Equal(1, target.SelectedIndex);
Assert.Equal("FooBar", target.SelectedItem);
}
private Control CreateTemplate(Carousel control)
{
return new CarouselPresenter

Loading…
Cancel
Save