diff --git a/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs b/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs index a724878317..e948e55b96 100644 --- a/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs +++ b/src/Avalonia.Base/Utilities/WeakEventHandlerManager.cs @@ -132,6 +132,7 @@ namespace Avalonia.Utilities public void Add(EventHandler s) { + Compact(true); if (_count == _data.Length) { //Extend capacity @@ -174,7 +175,7 @@ namespace Avalonia.Utilities } } - void Compact() + void Compact(bool preventDestroy = false) { int empty = -1; for (int c = 0; c < _count; c++) @@ -193,7 +194,7 @@ namespace Avalonia.Utilities } if (empty != -1) _count = empty; - if (_count == 0) + if (_count == 0 && !preventDestroy) Destroy(); }