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);
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);
}
}
}

Loading…
Cancel
Save