From bd022cca397a9c5a83a4f5f3392117a95930e6ac Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 6 Feb 2020 23:57:37 +0100 Subject: [PATCH] Clean up when node removed. --- src/Avalonia.Controls/SelectionNode.cs | 1 + .../SelectionModelTests.cs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/Avalonia.Controls/SelectionNode.cs b/src/Avalonia.Controls/SelectionNode.cs index 363eb35b94..5bfa76f83f 100644 --- a/src/Avalonia.Controls/SelectionNode.cs +++ b/src/Avalonia.Controls/SelectionNode.cs @@ -655,6 +655,7 @@ namespace Avalonia.Controls if (_childrenNodes[index] != null) { RealizedChildrenNodeCount--; + _childrenNodes[index]!.Dispose(); } _childrenNodes.RemoveAt(index); } diff --git a/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs b/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs index 208d85d8fd..e1a22dd790 100644 --- a/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs @@ -964,6 +964,20 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Removing_Item_Unhooks_CollectionChanged_Handlers() + { + var data = CreateNestedData(2, 2, 2); + var target = new SelectionModel { Source = data }; + + target.SelectAll(); + + var toRemove = (AvaloniaList)data[1]; + data.Remove(toRemove); + + Assert.Equal(0, GetSubscriberCount(toRemove)); + } + [Fact] public void Should_Not_Treat_Strings_As_Nested_Selections() {