diff --git a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs index 144174e371..e438843078 100644 --- a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs +++ b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs @@ -126,7 +126,21 @@ namespace Avalonia.Controls.Presenters generator.Clear(); Panel.Children.RemoveAll(containers.Select(x => x.ContainerControl)); - MoveToPage(-1, SelectedIndex >= 0 ? SelectedIndex : 0); + var newIndex = SelectedIndex; + + if(SelectedIndex < 0) + { + if(Items != null && Items.Count() > 0) + { + newIndex = 0; + } + else + { + newIndex = -1; + } + } + + MoveToPage(-1, newIndex); } break; } diff --git a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs index df61698209..f36e5864f6 100644 --- a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs @@ -170,6 +170,41 @@ namespace Avalonia.Controls.UnitTests Assert.Equal("Bar", ((TextBlock)child).Text); } + [Fact] + public void Selected_Index_Changes_To_When_Items_Assigned_Null() + { + var items = new ObservableCollection + { + "Foo", + "Bar", + "FooBar" + }; + + var target = new Carousel + { + Template = new FuncControlTemplate(CreateTemplate), + Items = items, + IsVirtualized = false + }; + + target.ApplyTemplate(); + target.Presenter.ApplyTemplate(); + + Assert.Single(target.GetLogicalChildren()); + + var child = target.GetLogicalChildren().Single(); + + Assert.IsType(child); + Assert.Equal("Foo", ((TextBlock)child).Text); + + target.Items = null; + + var numChildren = target.GetLogicalChildren().Count(); + + Assert.Equal(0, numChildren); + Assert.Equal(-1, target.SelectedIndex); + } + [Fact] public void Selected_Index_Is_Maintained_Carousel_Created_With_Non_Zero_SelectedIndex() {