diff --git a/src/Avalonia.Controls/Utils/SelectedItemsSync.cs b/src/Avalonia.Controls/Utils/SelectedItemsSync.cs
new file mode 100644
index 0000000000..3d6c88cd99
--- /dev/null
+++ b/src/Avalonia.Controls/Utils/SelectedItemsSync.cs
@@ -0,0 +1,226 @@
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Linq;
+using Avalonia.Collections;
+
+#nullable enable
+
+namespace Avalonia.Controls.Utils
+{
+ ///
+ /// Synchronizes an with a list of SelectedItems.
+ ///
+ internal class SelectedItemsSync
+ {
+ private IList? _items;
+ private bool _updatingItems;
+ private bool _updatingModel;
+
+ public SelectedItemsSync(ISelectionModel model)
+ {
+ Model = model;
+ }
+
+ public ISelectionModel Model { get; private set; }
+
+ public IList GetOrCreateItems()
+ {
+ if (_items == null)
+ {
+ var items = new AvaloniaList