Browse Source

Implement SelectedItem in terms of SelectedItems.

Steven Kirk 10 years ago
parent
commit
e2f7ff8a56
1 changed files with 16 additions and 6 deletions
  1. 16 6
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs

+ 16 - 6
src/Perspex.Controls/Primitives/SelectingItemsControl.cs

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