using System.Windows; using System.Windows.Controls; using System.Windows.Interactivity; namespace ClassicAssist.UI.Misc { public class BindableSelectedItemBehavior : Behavior { 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 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 } }