diff --git a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs index f887b987e0..a3123cf8c6 100644 --- a/src/Avalonia.Controls/Presenters/CarouselPresenter.cs +++ b/src/Avalonia.Controls/Presenters/CarouselPresenter.cs @@ -210,7 +210,7 @@ namespace Avalonia.Controls.Presenters { var container = ItemContainerGenerator.ContainerFromIndex(index); - if (container == null) + if (container == null && IsVirtualized) { var item = Items.Cast().ElementAt(index); var materialized = ItemContainerGenerator.Materialize(index, item, MemberSelector); diff --git a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs index 2070b4b66a..515e18434d 100644 --- a/tests/Avalonia.Controls.UnitTests/CarouselTests.cs +++ b/tests/Avalonia.Controls.UnitTests/CarouselTests.cs @@ -152,6 +152,29 @@ namespace Avalonia.Controls.UnitTests Assert.Equal("Bar", ((TextBlock)child).Text); } + [Fact] + public void Selected_Item_Changes_To_First_Item_When_Item_Added() + { + var items = new ObservableCollection(); + var target = new Carousel + { + Template = new FuncControlTemplate(CreateTemplate), + Items = items, + IsVirtualized = false + }; + + target.ApplyTemplate(); + target.Presenter.ApplyTemplate(); + + Assert.Equal(-1, target.SelectedIndex); + Assert.Empty(target.GetLogicalChildren()); + + items.Add("Foo"); + + Assert.Equal(0, target.SelectedIndex); + Assert.Single(target.GetLogicalChildren()); + } + [Fact] public void Selected_Index_Changes_To_When_Items_Assigned_Null() {