diff --git a/src/Avalonia.Controls/SelectionNode.cs b/src/Avalonia.Controls/SelectionNode.cs index 81177f06ca..024a7aa8e7 100644 --- a/src/Avalonia.Controls/SelectionNode.cs +++ b/src/Avalonia.Controls/SelectionNode.cs @@ -661,6 +661,7 @@ namespace Avalonia.Controls { removed.AddRange(_childrenNodes[index]!.SelectedItems); RealizedChildrenNodeCount--; + _childrenNodes[index]!.Dispose(); } _childrenNodes.RemoveAt(index); } diff --git a/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs b/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs index 040448d6fd..a024105a55 100644 --- a/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs @@ -1404,6 +1404,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() {