diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index 66aa312dd3..859ecadad3 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -62,8 +62,7 @@ namespace Perspex.Controls.Primitives RoutedEvent.Register("IsSelectedChanged", RoutingStrategies.Bubble); private int _selectedIndex = -1; - private object _selectedItem; - private IList _selectedItems; + private IList _selectedItems = new PerspexList(); /// /// Initializes static members of the class. @@ -81,7 +80,6 @@ namespace Perspex.Controls.Primitives public SelectingItemsControl() { ItemContainerGenerator.ContainersInitialized.Subscribe(ContainersInitialized); - _selectedItems = new PerspexList(); } /// @@ -108,13 +106,25 @@ namespace Perspex.Controls.Primitives { get { - return _selectedItem; + return _selectedItems.FirstOrDefault(); } set { - value = Items?.Cast().Contains(value) == true ? value : null; - SetAndRaise(SelectedItemProperty, ref _selectedItem, value); + var old = SelectedItem; + var effective = Items?.Cast().Contains(value) == true ? value : null; + + if (effective != old) + { + _selectedItems.Clear(); + + if (effective != null) + { + _selectedItems.Add(effective); + } + + RaisePropertyChanged(SelectedItemProperty, old, effective, BindingPriority.LocalValue); + } } }