Browse Source

Make SelectedItems a plain IList

As IList<T> is not covariant.
pull/278/head
Steven Kirk 11 years ago
parent
commit
6401cec2ef
  1. 4
      samples/BindingTest/ViewModels/MainWindowViewModel.cs
  2. 5
      src/Perspex.Controls/ListBox.cs
  3. 14
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs
  4. 11
      tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

4
samples/BindingTest/ViewModels/MainWindowViewModel.cs

@ -18,7 +18,7 @@ namespace BindingTest.ViewModels
StringValue = "Item " + x
}));
SelectedItems = new ObservableCollection<int> { 4, 6 };
SelectedItems = new ObservableCollection<TestItem>();
ShuffleItems = ReactiveCommand.Create();
ShuffleItems.Subscribe(_ =>
@ -29,7 +29,7 @@ namespace BindingTest.ViewModels
}
public ObservableCollection<TestItem> Items { get; }
public ObservableCollection<int> SelectedItems { get; }
public ObservableCollection<TestItem> SelectedItems { get; }
public ReactiveCommand<object> ShuffleItems { get; }
public string BooleanString

5
src/Perspex.Controls/ListBox.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Collections;
using System.Collections.Generic;
using Perspex.Collections;
using Perspex.Controls.Generators;
@ -17,7 +18,7 @@ namespace Perspex.Controls
/// <summary>
/// Defines the <see cref="SelectedItems"/> property.
/// </summary>
public static readonly new PerspexProperty<IList<object>> SelectedItemsProperty =
public static readonly new PerspexProperty<IList> SelectedItemsProperty =
SelectingItemsControl.SelectedItemsProperty;
/// <summary>
@ -27,7 +28,7 @@ namespace Perspex.Controls
SelectingItemsControl.SelectionModeProperty;
/// <inheritdoc/>
public new IList<object> SelectedItems
public new IList SelectedItems
{
get { return base.SelectedItems; }
}

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

@ -57,8 +57,8 @@ namespace Perspex.Controls.Primitives
/// <summary>
/// Defines the <see cref="SelectedItems"/> property.
/// </summary>
protected static readonly PerspexProperty<IList<object>> SelectedItemsProperty =
PerspexProperty.RegisterDirect<SelectingItemsControl, IList<object>>(
protected static readonly PerspexProperty<IList> SelectedItemsProperty =
PerspexProperty.RegisterDirect<SelectingItemsControl, IList>(
nameof(SelectedItems),
o => o.SelectedItems,
(o, v) => o.SelectedItems = v);
@ -80,7 +80,7 @@ namespace Perspex.Controls.Primitives
private int _selectedIndex = -1;
private object _selectedItem;
private IList<object> _selectedItems;
private IList _selectedItems;
private bool _ignoreContainerSelectionChanged;
/// <summary>
@ -153,7 +153,7 @@ namespace Perspex.Controls.Primitives
SelectedItems.Add(effective);
}
}
else
else if (SelectedItems.Count > 0)
{
SelectedItems.Clear();
}
@ -164,7 +164,7 @@ namespace Perspex.Controls.Primitives
/// <summary>
/// Gets the selected items.
/// </summary>
protected IList<object> SelectedItems
protected IList SelectedItems
{
get
{
@ -470,7 +470,7 @@ namespace Perspex.Controls.Primitives
/// </summary>
/// <param name="items">The items collection.</param>
/// <param name="desired">The desired items.</param>
private static void SynchronizeItems(IList<object> items, IEnumerable<object> desired)
private static void SynchronizeItems(IList items, IEnumerable<object> desired)
{
int index = 0;
@ -692,7 +692,7 @@ namespace Perspex.Controls.Primitives
/// Called when items are added to the <see cref="SelectedItems"/> collection.
/// </summary>
/// <param name="items">The added items.</param>
private void SelectedItemsAdded(IList<object> items)
private void SelectedItemsAdded(IList items)
{
if (items.Count > 0)
{

11
tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Perspex.Collections;
@ -25,7 +26,7 @@ namespace Perspex.Controls.UnitTests.Primitives
target.ApplyTemplate();
target.SelectedIndex = 1;
Assert.Equal(new[] { "bar" }, target.SelectedItems.ToList());
Assert.Equal(new[] { "bar" }, target.SelectedItems.Cast<object>().ToList());
}
[Fact]
@ -299,7 +300,7 @@ namespace Perspex.Controls.UnitTests.Primitives
target.SelectedIndex = 1;
target.SelectRange(3);
Assert.Equal(new[] { "bar", "baz", "qux" }, target.SelectedItems.ToList());
Assert.Equal(new[] { "bar", "baz", "qux" }, target.SelectedItems.Cast<object>().ToList());
}
[Fact]
@ -324,7 +325,7 @@ namespace Perspex.Controls.UnitTests.Primitives
target.SelectedIndex = 3;
target.SelectRange(1);
Assert.Equal(new[] { "qux", "baz", "bar" }, target.SelectedItems.ToList());
Assert.Equal(new[] { "qux", "baz", "bar" }, target.SelectedItems.Cast<object>().ToList());
}
[Fact]
@ -350,12 +351,12 @@ namespace Perspex.Controls.UnitTests.Primitives
target.SelectRange(5);
target.SelectRange(4);
Assert.Equal(new[] { "baz", "qux", "qiz" }, target.SelectedItems.ToList());
Assert.Equal(new[] { "baz", "qux", "qiz" }, target.SelectedItems.Cast<object>().ToList());
}
private class TestSelector : SelectingItemsControl
{
public new IList<object> SelectedItems
public new IList SelectedItems
{
get { return base.SelectedItems; }
set { base.SelectedItems = value; }

Loading…
Cancel
Save