53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Interactivity;
|
|
|
|
namespace ClassicAssist.UI.Misc
|
|
{
|
|
public class BindableSelectedItemBehavior : Behavior<TreeView>
|
|
{
|
|
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;
|
|
}
|
|
|
|
#region SelectedItem Property
|
|
|
|
public object SelectedItem
|
|
{
|
|
get => 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 )
|
|
{
|
|
if ( e.NewValue is TreeViewItem item )
|
|
{
|
|
item.SetValue( TreeViewItem.IsSelectedProperty, true );
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |