Browse Source

Merge pull request #3047 from Gillibald/fixes/2987failingTest

Properly handle setting SelectedIndex from XAML
pull/3052/head
Steven Kirk 7 years ago
committed by GitHub
parent
commit
8cfd657a98
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  2. 22
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

20
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -304,6 +304,11 @@ namespace Avalonia.Controls.Primitives
{
base.ItemsCollectionChanged(sender, e);
if (_updateCount > 0)
{
return;
}
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
@ -1071,13 +1076,20 @@ namespace Avalonia.Controls.Primitives
private void UpdateFinished()
{
if (_updateSelectedIndex != int.MinValue)
if (_updateSelectedItem != null)
{
SelectedIndex = _updateSelectedIndex;
SelectedItem = _updateSelectedItem;
}
else if (_updateSelectedItem != null)
else
{
SelectedItem = _updateSelectedItem;
if (ItemCount == 0 && SelectedIndex != -1)
{
SelectedIndex = -1;
}
else
{
SelectedIndex = _updateSelectedIndex != int.MinValue ? _updateSelectedIndex : 0;
}
}
}

22
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

@ -109,6 +109,28 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.True(items[1].IsSelected);
}
[Fact]
public void Setting_SelectedIndex_During_Initialize_Should_Select_Item_When_AlwaysSelected_Is_Used()
{
var listBox = new ListBox
{
SelectionMode = SelectionMode.Single | SelectionMode.AlwaysSelected
};
listBox.BeginInit();
listBox.SelectedIndex = 1;
var items = new AvaloniaList<string>();
listBox.Items = items;
items.Add("A");
items.Add("B");
items.Add("C");
listBox.EndInit();
Assert.Equal("B", listBox.SelectedItem);
}
[Fact]
public void Setting_SelectedIndex_Before_ApplyTemplate_Should_Set_Item_IsSelected_True()
{

Loading…
Cancel
Save