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, 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>
/// Defines the <see cref="SelectedItems"/> property.
/// </summary>
@ -61,8 +69,8 @@ namespace Perspex.Controls.Primitives
public static readonly RoutedEvent<RoutedEventArgs> IsSelectedChangedEvent =
RoutedEvent.Register<SelectingItemsControl, RoutedEventArgs>("IsSelectedChanged", RoutingStrategies.Bubble);
private int _selectedIndex = -1;
private IList<object> _selectedItems = new PerspexList<object>();
private PerspexList<int> _selectedIndexes = new PerspexList<int>();
private PerspexList<object> _selectedItems = new PerspexList<object>();
/// <summary>
/// Initializes static members of the <see cref="SelectingItemsControl"/> 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<object>().Count()) ? value : -1;
SetAndRaise(SelectedIndexProperty, ref _selectedIndex, value);
var old = SelectedIndex;
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>
/// Gets the selected items.
/// </summary>

Loading…
Cancel
Save