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() {