From f180ec4dd7fed1cbadcc8fa4aba4875fec4530fc Mon Sep 17 00:00:00 2001 From: Jeffrey Ye Date: Wed, 29 Aug 2018 14:22:00 -0700 Subject: [PATCH] Use SelectionChangedEventArgs instead of SelectedItemChangedEventArgs --- .../SelectedItemChangedEventArgs.cs | 36 ------------------- src/Avalonia.Controls/TreeView.cs | 26 ++++++++++---- .../TreeViewTests.cs | 5 +-- 3 files changed, 23 insertions(+), 44 deletions(-) delete mode 100644 src/Avalonia.Controls/SelectedItemChangedEventArgs.cs diff --git a/src/Avalonia.Controls/SelectedItemChangedEventArgs.cs b/src/Avalonia.Controls/SelectedItemChangedEventArgs.cs deleted file mode 100644 index 6fb8a2d313..0000000000 --- a/src/Avalonia.Controls/SelectedItemChangedEventArgs.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using Avalonia; -using Avalonia.Interactivity; - -namespace Avalonia.Controls -{ - /// - /// Provides data for the event. - /// - public class SelectedItemChangedEventArgs : RoutedEventArgs - { - /// - /// Initializes a new instance of the class. - /// - /// The event being raised. - /// The items added to the selection. - /// The items removed from the selection. - public SelectedItemChangedEventArgs(RoutedEvent routedEvent, object newItem, object oldItem) - : base(routedEvent) - { - NewItem = newItem; - OldItem = oldItem; - } - - /// - /// Gets the items that were added to the selection. - /// - public object NewItem { get; } - - /// - /// Gets the items that were removed from the selection. - /// - public object OldItem { get; } - } -} diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs index 50b45cbb9a..d449a7cd38 100644 --- a/src/Avalonia.Controls/TreeView.cs +++ b/src/Avalonia.Controls/TreeView.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; +using System.Collections.Generic; using System.Linq; using Avalonia.Controls.Generators; using Avalonia.Controls.Primitives; @@ -35,8 +36,8 @@ namespace Avalonia.Controls /// /// Defines the event. /// - public static readonly RoutedEvent SelectedItemChangedEvent = - RoutedEvent.Register( + public static readonly RoutedEvent SelectedItemChangedEvent = + RoutedEvent.Register( "SelectedItemChanged", RoutingStrategies.Bubble); @@ -53,7 +54,7 @@ namespace Avalonia.Controls /// /// Occurs when the control's selection changes. /// - public event EventHandler SelectedItemChanged + public event EventHandler SelectedItemChanged { add { AddHandler(SelectedItemChangedEvent, value); } remove { RemoveHandler(SelectedItemChangedEvent, value); } @@ -108,10 +109,23 @@ namespace Avalonia.Controls if (oldItem != _selectedItem) { - var changed = new SelectedItemChangedEventArgs( + // Fire the SelectionChanged event + List removed = new List(); + if (oldItem != null) + { + removed.Add(oldItem); + } + + List added = new List(); + if (_selectedItem != null) + { + added.Add(_selectedItem); + } + + var changed = new SelectionChangedEventArgs( SelectedItemChangedEvent, - _selectedItem, - oldItem); + added, + removed); RaiseEvent(changed); } } diff --git a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs index 8295409f7e..1a913865cb 100644 --- a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs @@ -188,8 +188,9 @@ namespace Avalonia.Controls.UnitTests var called = false; target.SelectedItemChanged += (s, e) => { - Assert.Null(e.OldItem); - Assert.Same(item, e.NewItem); + Assert.Empty(e.RemovedItems); + Assert.Equal(1, e.AddedItems.Count); + Assert.Same(item, e.AddedItems[0]); called = true; };