From e93d9d463ca9e6b2efd0cde39a49e0cbadebb1ba Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 3 Oct 2015 18:12:23 +0200 Subject: [PATCH] Implement SelectedIndex in terms of SelectedIndexes. --- .../Primitives/SelectingItemsControl.cs | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index 859ecadad3..b1cb52b305 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -38,6 +38,14 @@ namespace Perspex.Controls.Primitives o => o.SelectedItem, (o, v) => o.SelectedItem = v); + /// + /// Defines the property. + /// + protected static readonly PerspexProperty> SelectedIndexesProperty = + PerspexProperty.RegisterDirect>( + nameof(SelectedIndexes), + o => o.SelectedIndexes); + /// /// Defines the property. /// @@ -61,8 +69,8 @@ namespace Perspex.Controls.Primitives public static readonly RoutedEvent IsSelectedChangedEvent = RoutedEvent.Register("IsSelectedChanged", RoutingStrategies.Bubble); - private int _selectedIndex = -1; - private IList _selectedItems = new PerspexList(); + private PerspexList _selectedIndexes = new PerspexList(); + private PerspexList _selectedItems = new PerspexList(); /// /// Initializes static members of the class. @@ -89,13 +97,25 @@ namespace Perspex.Controls.Primitives { get { - return _selectedIndex; + return _selectedIndexes.Count > 0 ? _selectedIndexes[0]: -1; } set { - value = (value >= 0 && value < Items?.Cast().Count()) ? value : -1; - SetAndRaise(SelectedIndexProperty, ref _selectedIndex, value); + var old = SelectedIndex; + var effective = (value >= 0 && value < Items?.Cast().Count()) ? value : -1; + + if (old != effective) + { + _selectedIndexes.Clear(); + + if (effective != -1) + { + _selectedIndexes.Add(effective); + } + + RaisePropertyChanged(SelectedIndexProperty, old, effective, BindingPriority.LocalValue); + } } } @@ -128,6 +148,14 @@ namespace Perspex.Controls.Primitives } } + /// + /// Gets the selected indexes. + /// + protected IList SelectedIndexes + { + get { return _selectedIndexes; } + } + /// /// Gets the selected items. ///