53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
// Taken from http://stackoverflow.com/a/5118406/4153185
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Interactivity;
|
|
|
|
namespace Filtration.Views.Behaviors
|
|
{
|
|
internal class BindableSelectedItemBehavior : Behavior<TreeView>
|
|
{
|
|
#region SelectedItem Property
|
|
|
|
public object SelectedItem
|
|
{
|
|
get { return GetValue(SelectedItemProperty); }
|
|
set { SetValue(SelectedItemProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty SelectedItemProperty =
|
|
DependencyProperty.Register("SelectedItem", typeof (object), typeof (BindableSelectedItemBehavior),
|
|
new UIPropertyMetadata(null, OnSelectedItemChanged));
|
|
|
|
private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
var item = e.NewValue as TreeViewItem;
|
|
item?.SetValue(TreeViewItem.IsSelectedProperty, true);
|
|
}
|
|
|
|
#endregion
|
|
|
|
protected override void OnAttached()
|
|
{
|
|
base.OnAttached();
|
|
|
|
AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged;
|
|
}
|
|
|
|
protected override void OnDetaching()
|
|
{
|
|
base.OnDetaching();
|
|
|
|
if (AssociatedObject != null)
|
|
{
|
|
AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
|
|
}
|
|
}
|
|
|
|
private void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
|
{
|
|
SelectedItem = e.NewValue;
|
|
}
|
|
}
|
|
}
|