From bfb334ca5ebfb249e5daebc878adbd3ea7fb4c3d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 23 Jan 2016 20:48:03 +0100 Subject: [PATCH] Ensure TreeViewItem.IsSelected is set. When TreeView.SelectedItem changes. --- src/Perspex.Controls/TreeView.cs | 23 +++++++++++++++-- .../TreeViewTests.cs | 25 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Perspex.Controls/TreeView.cs b/src/Perspex.Controls/TreeView.cs index 4b7b1f986a..0a83891bc8 100644 --- a/src/Perspex.Controls/TreeView.cs +++ b/src/Perspex.Controls/TreeView.cs @@ -46,8 +46,27 @@ namespace Perspex.Controls /// public object SelectedItem { - get { return _selectedItem; } - set { SetAndRaise(SelectedItemProperty, ref _selectedItem, value); } + get + { + return _selectedItem; + } + + set + { + if (_selectedItem != null) + { + var container = ItemContainerGenerator.Index.ContainerFromItem(_selectedItem); + MarkContainerSelected(container, false); + } + + SetAndRaise(SelectedItemProperty, ref _selectedItem, value); + + if (_selectedItem != null) + { + var container = ItemContainerGenerator.Index.ContainerFromItem(_selectedItem); + MarkContainerSelected(container, true); + } + } } /// diff --git a/tests/Perspex.Controls.UnitTests/TreeViewTests.cs b/tests/Perspex.Controls.UnitTests/TreeViewTests.cs index 8ee0d73a1e..f28cabe0f3 100644 --- a/tests/Perspex.Controls.UnitTests/TreeViewTests.cs +++ b/tests/Perspex.Controls.UnitTests/TreeViewTests.cs @@ -107,6 +107,31 @@ namespace Perspex.Controls.UnitTests Assert.True(container.IsSelected); } + [Fact] + public void Setting_SelectedItem_Should_Set_Container_Selected() + { + var tree = CreateTestTreeData(); + var target = new TreeView + { + Template = CreateTreeViewTemplate(), + Items = tree, + DataTemplates = CreateNodeDataTemplate(), + }; + + var visualRoot = new TestRoot(); + visualRoot.Child = target; + ApplyTemplates(target); + + var item = tree[0].Children[1].Children[0]; + var container = (TreeViewItem)target.ItemContainerGenerator.Index.ContainerFromItem(item); + + Assert.NotNull(container); + + target.SelectedItem = item; + + Assert.True(container.IsSelected); + } + [Fact] public void LogicalChildren_Should_Be_Set() {