Browse Source
Merge branch 'master' into renderer-lock-allocations
pull/2918/head
Dariusz Komosiński
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
28 additions and
2 deletions
-
src/Avalonia.Controls/Generators/ItemContainerGenerator.cs
-
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
-
tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.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; |
|
|
|
|
|
|
|
@ -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, |
|
|
|
|
|
|
|
@ -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) => |
|
|
|
|