Skip to content

Commit

Permalink
Check ISelectable.IsSelected when items added.
Browse files Browse the repository at this point in the history
Fixes #3181.
  • Loading branch information
grokys committed Feb 17, 2020
1 parent 0f9ceb2 commit 1df0bcf
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/Avalonia.Controls/Primitives/SelectingItemsControl.cs
Expand Up @@ -383,12 +383,40 @@ protected override void ItemsChanged(AvaloniaPropertyChangedEventArgs e)
}

base.ItemsChanged(e);

var newItems = (IEnumerable)e.NewValue;

if (Items != null)
{
var index = 0;

foreach (var i in newItems)
{
if (i is ISelectable s && s.IsSelected)
{
Selection.Select(index);
}

++index;
}
}
}

/// <inheritdoc/>
protected override void ItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
base.ItemsCollectionChanged(sender, e);

if (e.NewItems != null)
{
for (var i = 0; i < e.NewItems.Count; ++i)
{
if (e.NewItems[i] is ISelectable s && s.IsSelected)
{
Selection.Select(e.NewStartingIndex + i);
}
}
}
}

/// <inheritdoc/>
Expand Down
28 changes: 28 additions & 0 deletions tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs
@@ -1,6 +1,7 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.

using System.Collections.ObjectModel;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Shapes;
Expand Down Expand Up @@ -78,6 +79,33 @@ public void SelectionBoxItem_Rectangle_Is_Removed_From_Logical_Tree()
Assert.False(((ILogical)rectangle).IsAttachedToLogicalTree);
}

[Fact]
public void Selected_Item_Should_Be_Loaded_From_Inline_Items_IsSelected_Property()
{
var target = new ComboBox
{
Items = new[]
{
new ComboBoxItem(),
new ComboBoxItem { IsSelected = true },
}
};

Assert.Equal(1, target.SelectedIndex);
}

[Fact]
public void Selected_Item_Should_Be_Loaded_When_IsSelected_Inline_Item_Added()
{
var items = new ObservableCollection<ComboBoxItem>();
var target = new ComboBox { Items = items, };

items.Add(new ComboBoxItem());
items.Add(new ComboBoxItem { IsSelected = true });

Assert.Equal(1, target.SelectedIndex);
}

private FuncControlTemplate GetTemplate()
{
return new FuncControlTemplate<ComboBox>((parent, scope) =>
Expand Down

0 comments on commit 1df0bcf

Please sign in to comment.