소스 검색

Use SelectionChangedEventArgs instead of SelectedItemChangedEventArgs

Jeffrey Ye 7 년 전
부모
커밋
f180ec4dd7
3개의 변경된 파일23개의 추가작업 그리고 44개의 파일을 삭제
  1. 0 36
      src/Avalonia.Controls/SelectedItemChangedEventArgs.cs
  2. 20 6
      src/Avalonia.Controls/TreeView.cs
  3. 3 2
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

+ 0 - 36
src/Avalonia.Controls/SelectedItemChangedEventArgs.cs

@@ -1,36 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Avalonia;
-using Avalonia.Interactivity;
-
-namespace Avalonia.Controls
-{
-    /// <summary>
-    /// Provides data for the <see cref="TreeView.SelectedItemChanged"/> event.
-    /// </summary>
-    public class SelectedItemChangedEventArgs : RoutedEventArgs
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="SelectedItemChangedEventArgs"/> class.
-        /// </summary>
-        /// <param name="routedEvent">The event being raised.</param>
-        /// <param name="newItem">The items added to the selection.</param>
-        /// <param name="oldItem">The items removed from the selection.</param>
-        public SelectedItemChangedEventArgs(RoutedEvent routedEvent, object newItem, object oldItem)
-                : base(routedEvent)
-        {
-            NewItem = newItem;
-            OldItem = oldItem;
-        }
-
-        /// <summary>
-        /// Gets the items that were added to the selection.
-        /// </summary>
-        public object NewItem { get; }
-
-        /// <summary>
-        /// Gets the items that were removed from the selection.
-        /// </summary>
-        public object OldItem { get; }
-    }
-}

+ 20 - 6
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
         /// <summary>
         /// Defines the <see cref="SelectedItemChanged"/> event.
         /// </summary>
-        public static readonly RoutedEvent<SelectedItemChangedEventArgs> SelectedItemChangedEvent =
-            RoutedEvent.Register<TreeView, SelectedItemChangedEventArgs>(
+        public static readonly RoutedEvent<SelectionChangedEventArgs> SelectedItemChangedEvent =
+            RoutedEvent.Register<TreeView, SelectionChangedEventArgs>(
                 "SelectedItemChanged",
                 RoutingStrategies.Bubble);
 
@@ -53,7 +54,7 @@ namespace Avalonia.Controls
         /// <summary>
         /// Occurs when the control's selection changes.
         /// </summary>
-        public event EventHandler<SelectedItemChangedEventArgs> SelectedItemChanged
+        public event EventHandler<SelectionChangedEventArgs> 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<object> removed = new List<object>();
+                    if (oldItem != null)
+                    {
+                        removed.Add(oldItem);
+                    }
+
+                    List<object> added = new List<object>();
+                    if (_selectedItem != null)
+                    {
+                        added.Add(_selectedItem);
+                    }
+
+                    var changed = new SelectionChangedEventArgs(
                         SelectedItemChangedEvent,
-                        _selectedItem,
-                        oldItem);
+                        added,
+                        removed);
                     RaiseEvent(changed);
                 }
             }

+ 3 - 2
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;
             };