Browse Source

Merge branch 'master' into renderer-lock-allocations

pull/2918/head
Dariusz Komosiński 7 years ago
committed by GitHub
parent
commit
5e800a5a38
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Avalonia.Controls/Generators/ItemContainerGenerator.cs
  2. 5
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
  3. 19
      tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs

6
src/Avalonia.Controls/Generators/ItemContainerGenerator.cs

@ -128,6 +128,12 @@ namespace Avalonia.Controls.Generators
}
Dematerialized?.Invoke(this, new ItemContainerEventArgs(startingIndex, result));
if (toMove.Count > 0)
{
var containers = toMove.Select(x => x.Value).ToList();
Recycled?.Invoke(this, new ItemContainerEventArgs(containers[0].Index, containers));
}
}
return result;

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

@ -979,13 +979,14 @@ namespace Avalonia.Controls.Primitives
}
var item = ElementAt(Items, index);
var itemChanged = !Equals(item, oldItem);
var added = -1;
HashSet<int> removed = null;
_selectedIndex = index;
_selectedItem = item;
if (oldIndex != index || _selection.HasMultiple)
if (oldIndex != index || itemChanged || _selection.HasMultiple)
{
if (clear)
{
@ -1022,7 +1023,7 @@ namespace Avalonia.Controls.Primitives
index);
}
if (!Equals(item, oldItem))
if (itemChanged)
{
RaisePropertyChanged(
SelectedItemProperty,

19
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs

@ -102,6 +102,25 @@ namespace Avalonia.Controls.UnitTests.Primitives
Assert.Null(target.SelectedItem);
}
[Fact]
public void Removing_Selected_First_Item_Should_Select_Next_Item()
{
var items = new AvaloniaList<string>(new[] { "foo", "bar" });
var target = new TestSelector
{
Items = items,
Template = Template(),
};
target.ApplyTemplate();
target.Presenter.ApplyTemplate();
items.RemoveAt(0);
Assert.Equal(0, target.SelectedIndex);
Assert.Equal("bar", target.SelectedItem);
Assert.Equal(new[] { ":selected" }, target.Presenter.Panel.Children[0].Classes);
}
private FuncControlTemplate Template()
{
return new FuncControlTemplate<SelectingItemsControl>((control, scope) =>

Loading…
Cancel
Save