Browse Source

Implement SelectedItem in terms of SelectedItems.

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

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

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

Loading…
Cancel
Save