Browse Source
Merge pull request #10759 from AvaloniaUI/fixes/treeview-selecteditem-inside-selectionchanged-event
Fix TreeView SelectedItem sync
pull/10834/head
Dan Walmsley
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
32 additions and
3 deletions
-
src/Avalonia.Controls/TreeView.cs
-
tests/Avalonia.Controls.UnitTests/TreeViewTests.cs
|
|
|
@ -307,12 +307,14 @@ namespace Avalonia.Controls |
|
|
|
|
|
|
|
private void SelectSingleItem(object item) |
|
|
|
{ |
|
|
|
var oldValue = _selectedItem; |
|
|
|
_syncingSelectedItems = true; |
|
|
|
SelectedItems.Clear(); |
|
|
|
SelectedItems.Clear(); |
|
|
|
_selectedItem = item; |
|
|
|
SelectedItems.Add(item); |
|
|
|
_syncingSelectedItems = false; |
|
|
|
|
|
|
|
SetAndRaise(SelectedItemProperty, ref _selectedItem, item); |
|
|
|
RaisePropertyChanged(SelectedItemProperty, oldValue, _selectedItem); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
@ -722,6 +722,33 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.True(called); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void SelectedItem_Should_Be_Valid_When_SelectedItemChanged_Event_Raised() |
|
|
|
{ |
|
|
|
using var app = Start(); |
|
|
|
var data = CreateTestTreeData(); |
|
|
|
var target = CreateTarget(data: data); |
|
|
|
|
|
|
|
var item = data[0].Children[1].Children[0]; |
|
|
|
var container = Assert.IsType<TreeViewItem>(target.TreeContainerFromItem(item)); |
|
|
|
|
|
|
|
Assert.NotNull(container); |
|
|
|
|
|
|
|
var called = false; |
|
|
|
target.SelectionChanged += (s, e) => |
|
|
|
{ |
|
|
|
Assert.Same(item, e.AddedItems[0]); |
|
|
|
Assert.Same(item, target.SelectedItem); |
|
|
|
called = true; |
|
|
|
}; |
|
|
|
|
|
|
|
_mouse.Click(container); |
|
|
|
|
|
|
|
Assert.Equal(item, target.SelectedItem); |
|
|
|
Assert.True(container.IsSelected); |
|
|
|
Assert.True(called); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Bound_SelectedItem_Should_Not_Be_Cleared_when_Changing_Selection() |
|
|
|
{ |
|
|
|
@ -756,7 +783,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
using var app = Start(); |
|
|
|
var data = CreateTestTreeData(); |
|
|
|
var target = CreateTarget(data: data, expandAll: false); |
|
|
|
|
|
|
|
|
|
|
|
target.SelectedItem = data[0].Children[1]; |
|
|
|
|
|
|
|
var rootItem = Assert.IsType<TreeViewItem>(target.ContainerFromIndex(0)); |
|
|
|
|