Browse Source

Implement SelectedIndex in terms of SelectedIndexes.

pull/278/head
Steven Kirk 11 years ago
parent
commit
e93d9d463c
  1. 38
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs

38
src/Perspex.Controls/Primitives/SelectingItemsControl.cs

@ -38,6 +38,14 @@ namespace Perspex.Controls.Primitives
o => o.SelectedItem, o => o.SelectedItem,
(o, v) => o.SelectedItem = v); (o, v) => o.SelectedItem = v);
/// <summary>
/// Defines the <see cref="SelectedIndexes"/> property.
/// </summary>
protected static readonly PerspexProperty<IList<int>> SelectedIndexesProperty =
PerspexProperty.RegisterDirect<SelectingItemsControl, IList<int>>(
nameof(SelectedIndexes),
o => o.SelectedIndexes);
/// <summary> /// <summary>
/// Defines the <see cref="SelectedItems"/> property. /// Defines the <see cref="SelectedItems"/> property.
/// </summary> /// </summary>
@ -61,8 +69,8 @@ namespace Perspex.Controls.Primitives
public static readonly RoutedEvent<RoutedEventArgs> IsSelectedChangedEvent = public static readonly RoutedEvent<RoutedEventArgs> IsSelectedChangedEvent =
RoutedEvent.Register<SelectingItemsControl, RoutedEventArgs>("IsSelectedChanged", RoutingStrategies.Bubble); RoutedEvent.Register<SelectingItemsControl, RoutedEventArgs>("IsSelectedChanged", RoutingStrategies.Bubble);
private int _selectedIndex = -1; private PerspexList<int> _selectedIndexes = new PerspexList<int>();
private IList<object> _selectedItems = new PerspexList<object>(); private PerspexList<object> _selectedItems = new PerspexList<object>();
/// <summary> /// <summary>
/// Initializes static members of the <see cref="SelectingItemsControl"/> class. /// Initializes static members of the <see cref="SelectingItemsControl"/> class.
@ -89,13 +97,25 @@ namespace Perspex.Controls.Primitives
{ {
get get
{ {
return _selectedIndex; return _selectedIndexes.Count > 0 ? _selectedIndexes[0]: -1;
} }
set set
{ {
value = (value >= 0 && value < Items?.Cast<object>().Count()) ? value : -1; var old = SelectedIndex;
SetAndRaise(SelectedIndexProperty, ref _selectedIndex, value); var effective = (value >= 0 && value < Items?.Cast<object>().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
} }
} }
/// <summary>
/// Gets the selected indexes.
/// </summary>
protected IList<int> SelectedIndexes
{
get { return _selectedIndexes; }
}
/// <summary> /// <summary>
/// Gets the selected items. /// Gets the selected items.
/// </summary> /// </summary>

Loading…
Cancel
Save