diff --git a/src/Controls/src/Core/Handlers/Items/ItemsViewHandler.Windows.cs b/src/Controls/src/Core/Handlers/Items/ItemsViewHandler.Windows.cs index 0a9116775412..c0b8a55bd9d1 100644 --- a/src/Controls/src/Core/Handlers/Items/ItemsViewHandler.Windows.cs +++ b/src/Controls/src/Core/Handlers/Items/ItemsViewHandler.Windows.cs @@ -123,6 +123,7 @@ protected virtual void CleanUpCollectionViewSource() CollectionViewSource.Source = null; CollectionViewSource = null; } + VirtualView?.ClearLogicalChildren(); if (VirtualView?.ItemsSource == null) { diff --git a/src/Controls/src/Core/Items/ItemsView.cs b/src/Controls/src/Core/Items/ItemsView.cs index 3cced27c4eaf..8e6a56ca0233 100644 --- a/src/Controls/src/Core/Items/ItemsView.cs +++ b/src/Controls/src/Core/Items/ItemsView.cs @@ -142,6 +142,15 @@ public void RemoveLogicalChild(Element element) VisualDiagnostics.OnChildRemoved(this, element, oldLogicalIndex); } + internal void ClearLogicalChildren() + { + // Reverse for-loop, so children can be removed while iterating + for (int i = _logicalChildren.Count - 1; i >= 0; i--) + { + RemoveLogicalChild(_logicalChildren[i]); + } + } + internal override IReadOnlyList LogicalChildrenInternal => _logicalChildren.AsReadOnly(); internal static readonly BindableProperty InternalItemsLayoutProperty =