diff --git a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs index 185af1a715..41960ac670 100644 --- a/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Avalonia.Controls/Primitives/SelectingItemsControl.cs @@ -447,6 +447,12 @@ namespace Avalonia.Controls.Primitives { base.OnItemsViewCollectionChanged(sender!, e); + //Do not change SelectedIndex during initialization + if (_updateState is not null) + { + return; + } + if (AlwaysSelected && SelectedIndex == -1 && ItemCount > 0) { SelectedIndex = 0; @@ -1217,7 +1223,7 @@ namespace Avalonia.Controls.Primitives _oldSelectedIndex = model.SelectedIndex; _oldSelectedItem = model.SelectedItem; - if (AlwaysSelected && model.Count == 0) + if (_updateState is null && AlwaysSelected && model.Count == 0) { model.SelectedIndex = 0; } @@ -1297,6 +1303,11 @@ namespace Avalonia.Controls.Primitives { SelectedItem = state.SelectedItem.Value; } + + if (AlwaysSelected && SelectedIndex == -1 && ItemCount > 0) + { + SelectedIndex = 0; + } } } diff --git a/tests/Avalonia.Controls.UnitTests/TabControlTests.cs b/tests/Avalonia.Controls.UnitTests/TabControlTests.cs index 1ec612a85d..89bb79a276 100644 --- a/tests/Avalonia.Controls.UnitTests/TabControlTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TabControlTests.cs @@ -2,11 +2,13 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System.Runtime.CompilerServices; using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Controls.Selection; using Avalonia.Controls.Templates; using Avalonia.Controls.Utils; +using Avalonia.Data; using Avalonia.Input; using Avalonia.LogicalTree; using Avalonia.Markup.Xaml; @@ -18,6 +20,11 @@ namespace Avalonia.Controls.UnitTests { public class TabControlTests { + static TabControlTests() + { + RuntimeHelpers.RunClassConstructor(typeof(RelativeSource).TypeHandle); + } + [Fact] public void First_Tab_Should_Be_Selected_By_Default() { @@ -435,6 +442,29 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Should_Have_Initial_SelectedValue() + { + var xaml = @" + + + + "; + + var tabControl = (TabControl)AvaloniaRuntimeXamlLoader.Load(xaml); + + Assert.Equal("World", tabControl.SelectedValue); + Assert.Equal(1, tabControl.SelectedIndex); + } + [Fact] public void Tab_Navigation_Should_Move_To_First_TabItem_When_No_Anchor_Element_Selected() {