From 6401cec2ef0799d5db9244dfb3937d3476841107 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 13 Oct 2015 01:23:44 +0200 Subject: [PATCH] Make SelectedItems a plain IList As IList is not covariant. --- .../BindingTest/ViewModels/MainWindowViewModel.cs | 4 ++-- src/Perspex.Controls/ListBox.cs | 5 +++-- .../Primitives/SelectingItemsControl.cs | 14 +++++++------- .../SelectingItemsControlTests_Multiple.cs | 11 ++++++----- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/samples/BindingTest/ViewModels/MainWindowViewModel.cs b/samples/BindingTest/ViewModels/MainWindowViewModel.cs index c5798d07fa..a8ec8ad60d 100644 --- a/samples/BindingTest/ViewModels/MainWindowViewModel.cs +++ b/samples/BindingTest/ViewModels/MainWindowViewModel.cs @@ -18,7 +18,7 @@ namespace BindingTest.ViewModels StringValue = "Item " + x })); - SelectedItems = new ObservableCollection { 4, 6 }; + SelectedItems = new ObservableCollection(); ShuffleItems = ReactiveCommand.Create(); ShuffleItems.Subscribe(_ => @@ -29,7 +29,7 @@ namespace BindingTest.ViewModels } public ObservableCollection Items { get; } - public ObservableCollection SelectedItems { get; } + public ObservableCollection SelectedItems { get; } public ReactiveCommand ShuffleItems { get; } public string BooleanString diff --git a/src/Perspex.Controls/ListBox.cs b/src/Perspex.Controls/ListBox.cs index 88459468bf..e1c57c1252 100644 --- a/src/Perspex.Controls/ListBox.cs +++ b/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 /// /// Defines the property. /// - public static readonly new PerspexProperty> SelectedItemsProperty = + public static readonly new PerspexProperty SelectedItemsProperty = SelectingItemsControl.SelectedItemsProperty; /// @@ -27,7 +28,7 @@ namespace Perspex.Controls SelectingItemsControl.SelectionModeProperty; /// - public new IList SelectedItems + public new IList SelectedItems { get { return base.SelectedItems; } } diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index 974a07298f..8671be4a47 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -57,8 +57,8 @@ namespace Perspex.Controls.Primitives /// /// Defines the property. /// - protected static readonly PerspexProperty> SelectedItemsProperty = - PerspexProperty.RegisterDirect>( + protected static readonly PerspexProperty SelectedItemsProperty = + PerspexProperty.RegisterDirect( 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 _selectedItems; + private IList _selectedItems; private bool _ignoreContainerSelectionChanged; /// @@ -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 /// /// Gets the selected items. /// - protected IList SelectedItems + protected IList SelectedItems { get { @@ -470,7 +470,7 @@ namespace Perspex.Controls.Primitives /// /// The items collection. /// The desired items. - private static void SynchronizeItems(IList items, IEnumerable desired) + private static void SynchronizeItems(IList items, IEnumerable desired) { int index = 0; @@ -692,7 +692,7 @@ namespace Perspex.Controls.Primitives /// Called when items are added to the collection. /// /// The added items. - private void SelectedItemsAdded(IList items) + private void SelectedItemsAdded(IList items) { if (items.Count > 0) { diff --git a/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs b/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs index 07fe904444..8a2d0f72f0 100644 --- a/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs +++ b/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().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().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().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().ToList()); } private class TestSelector : SelectingItemsControl { - public new IList SelectedItems + public new IList SelectedItems { get { return base.SelectedItems; } set { base.SelectedItems = value; }