diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs
index 3003dab85e..c574799724 100644
--- a/src/Avalonia.Controls/TreeView.cs
+++ b/src/Avalonia.Controls/TreeView.cs
@@ -1,6 +1,8 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// 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;
@@ -31,6 +33,14 @@ namespace Avalonia.Controls
o => o.SelectedItem,
(o, v) => o.SelectedItem = v);
+ ///
+ /// Defines the event.
+ ///
+ public static readonly RoutedEvent SelectedItemChangedEvent =
+ RoutedEvent.Register(
+ "SelectedItemChanged",
+ RoutingStrategies.Bubble);
+
private object _selectedItem;
///
@@ -41,6 +51,15 @@ namespace Avalonia.Controls
// HACK: Needed or SelectedItem property will not be found in Release build.
}
+ ///
+ /// Occurs when the control's selection changes.
+ ///
+ public event EventHandler SelectedItemChanged
+ {
+ add { AddHandler(SelectedItemChangedEvent, value); }
+ remove { RemoveHandler(SelectedItemChangedEvent, value); }
+ }
+
///
/// Gets the for the tree view.
///
@@ -74,6 +93,7 @@ namespace Avalonia.Controls
MarkContainerSelected(container, false);
}
+ var oldItem = _selectedItem;
SetAndRaise(SelectedItemProperty, ref _selectedItem, value);
if (_selectedItem != null)
@@ -86,6 +106,28 @@ namespace Avalonia.Controls
container.BringIntoView();
}
}
+
+ if (oldItem != _selectedItem)
+ {
+ // Fire the SelectionChanged event
+ List