From 261e4775229d84bcee3a93ba51c38f21bdd5e2b2 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 9 Jan 2020 10:23:29 +0100 Subject: [PATCH] ItemsRepeater fix. * Remove item from repeater children if there is no itemtemplate when being recycled. Ported from https://github.com/microsoft/microsoft-ui-xaml/commit/c4d4d9995a0ee7df27aac11f875538dd4fbe14fb --- src/Avalonia.Controls/Repeater/ViewManager.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Repeater/ViewManager.cs b/src/Avalonia.Controls/Repeater/ViewManager.cs index e4fc1158ef..f4588787e8 100644 --- a/src/Avalonia.Controls/Repeater/ViewManager.cs +++ b/src/Avalonia.Controls/Repeater/ViewManager.cs @@ -110,7 +110,19 @@ namespace Avalonia.Controls public void ClearElementToElementFactory(IControl element) { _owner.OnElementClearing(element); - _owner.ItemTemplateShim?.RecycleElement(_owner, element); + + if (_owner.ItemTemplateShim != null) + { + _owner.ItemTemplateShim.RecycleElement(_owner, element); + } + else + { + // No ItemTemplate to recycle to, remove the element from the children collection. + if (!_owner.Children.Remove(element)) + { + throw new InvalidOperationException("ItemsRepeater's child not found in its Children collection."); + } + } var virtInfo = ItemsRepeater.GetVirtualizationInfo(element); virtInfo.MoveOwnershipToElementFactory();