Browse Source

Use SelectionChangedEventArgs instead of SelectedItemChangedEventArgs

pull/1832/head
Jeffrey Ye 8 years ago
parent
commit
f180ec4dd7
  1. 36
      src/Avalonia.Controls/SelectedItemChangedEventArgs.cs
  2. 26
      src/Avalonia.Controls/TreeView.cs
  3. 5
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

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

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

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

Loading…
Cancel
Save