From e2f7ff8a56f927dabdad480c8cf926036c167197 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 3 Oct 2015 18:06:19 +0200 Subject: [PATCH] Implement SelectedItem in terms of SelectedItems. --- .../Primitives/SelectingItemsControl.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) 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); + } } }