|
|
|
@ -1279,7 +1279,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var target = CreateTarget(data: data, itemContainerTheme: itemTheme); |
|
|
|
var target = CreateTarget(data: data, itemContainerTheme: itemTheme, multiSelect: true); |
|
|
|
|
|
|
|
AssertDataSelection(data, selected); |
|
|
|
AssertContainerSelection(target, selected); |
|
|
|
@ -1305,7 +1305,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var target = CreateTarget(data: data, styles: new[] { style }); |
|
|
|
var target = CreateTarget(data: data, multiSelect: true, styles: new[] { style }); |
|
|
|
|
|
|
|
AssertDataSelection(data, selected); |
|
|
|
AssertContainerSelection(target, selected); |
|
|
|
@ -1331,7 +1331,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var target = CreateTarget(data: data, itemContainerTheme: itemTheme); |
|
|
|
var target = CreateTarget(data: data, itemContainerTheme: itemTheme, multiSelect: true); |
|
|
|
|
|
|
|
selected[1].IsSelected = true; |
|
|
|
|
|
|
|
@ -1341,6 +1341,93 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.Equal(selected, target.SelectedItems); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Selection_State_Is_Updated_Via_IsSelected_Binding_On_Expand() |
|
|
|
{ |
|
|
|
using var app = Start(); |
|
|
|
var data = CreateTestTreeData(); |
|
|
|
var selected = new[] { data[0], data[0].Children[1] }; |
|
|
|
|
|
|
|
foreach (var node in selected) |
|
|
|
node.IsSelected = true; |
|
|
|
|
|
|
|
var itemTheme = new ControlTheme(typeof(TreeViewItem)) |
|
|
|
{ |
|
|
|
BasedOn = CreateTreeViewItemControlTheme(), |
|
|
|
Setters = |
|
|
|
{ |
|
|
|
new Setter(SelectingItemsControl.IsSelectedProperty, new Binding("IsSelected")), |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var target = CreateTarget( |
|
|
|
data: data, |
|
|
|
expandAll: false, |
|
|
|
itemContainerTheme: itemTheme, |
|
|
|
multiSelect: true); |
|
|
|
|
|
|
|
var rootContainer = Assert.IsType<TreeViewItem>(target.ContainerFromIndex(0)); |
|
|
|
|
|
|
|
// Root TreeViewItem isn't expanded so selection for child won't have been picked
|
|
|
|
// up by IsSelected binding yet.
|
|
|
|
AssertContainerSelection(target, new[] { selected[0] }); |
|
|
|
Assert.Equal(selected[0], target.SelectedItem); |
|
|
|
Assert.Equal(new[] { selected[0] }, target.SelectedItems); |
|
|
|
|
|
|
|
rootContainer.IsExpanded = true; |
|
|
|
Layout(target); |
|
|
|
|
|
|
|
// Root is expanded so now all expected items will be selected.
|
|
|
|
AssertDataSelection(data, selected); |
|
|
|
AssertContainerSelection(target, selected); |
|
|
|
Assert.Equal(selected[0], target.SelectedItem); |
|
|
|
Assert.Equal(selected, target.SelectedItems); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Selection_State_Is_Updated_Via_IsSelected_Binding_On_Expand_Single_Select() |
|
|
|
{ |
|
|
|
using var app = Start(); |
|
|
|
var data = CreateTestTreeData(); |
|
|
|
var selected = new[] { data[0], data[0].Children[1] }; |
|
|
|
|
|
|
|
foreach (var node in selected) |
|
|
|
node.IsSelected = true; |
|
|
|
|
|
|
|
var itemTheme = new ControlTheme(typeof(TreeViewItem)) |
|
|
|
{ |
|
|
|
BasedOn = CreateTreeViewItemControlTheme(), |
|
|
|
Setters = |
|
|
|
{ |
|
|
|
new Setter(SelectingItemsControl.IsSelectedProperty, new Binding("IsSelected")), |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
var target = CreateTarget( |
|
|
|
data: data, |
|
|
|
expandAll: false, |
|
|
|
itemContainerTheme: itemTheme); |
|
|
|
|
|
|
|
var rootContainer = Assert.IsType<TreeViewItem>(target.ContainerFromIndex(0)); |
|
|
|
|
|
|
|
// Root TreeViewItem isn't expanded so selection for child won't have been picked
|
|
|
|
// up by IsSelected binding yet.
|
|
|
|
AssertContainerSelection(target, new[] { selected[0] }); |
|
|
|
Assert.Equal(selected[0], target.SelectedItem); |
|
|
|
Assert.Equal(new[] { selected[0] }, target.SelectedItems); |
|
|
|
|
|
|
|
rootContainer.IsExpanded = true; |
|
|
|
Layout(target); |
|
|
|
|
|
|
|
// Root is expanded and newly revealed selected node will replace current selection
|
|
|
|
// given that we're in SelectionMode == Single.
|
|
|
|
selected = new[] { selected[1] }; |
|
|
|
AssertDataSelection(data, selected); |
|
|
|
AssertContainerSelection(target, selected); |
|
|
|
Assert.Equal(selected[0], target.SelectedItem); |
|
|
|
Assert.Equal(selected, target.SelectedItems); |
|
|
|
} |
|
|
|
|
|
|
|
private static TreeView CreateTarget(Optional<IList<Node>?> data = default, |
|
|
|
bool expandAll = true, |
|
|
|
ControlTheme? itemContainerTheme = null, |
|
|
|
|