Create Event Handler for TreeViewItem in WPF

后端 未结 4 1966
被撕碎了的回忆
被撕碎了的回忆 2021-01-06 05:22

Im adding items to TreeView control via ItemsSource property and ItemTemplate property to set the template for TreeViewItem. How can i add an event handler to handle selecti

4条回答
  •  情歌与酒
    2021-01-06 05:49

    There are different ways to Bind of the SelectedItemChanged event of TreeviewItem:

    Method 1: Direct Attaching Event

    The attachment of the event can be done in Xaml

    
            
    
    Private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e)
    {
    
    }
    
    
    

    Or on code Behind

    myTreeview.SelectedItemChanged += new RoutedPropertyChangedEventHandler(TreeView_SelectedItemChanged);
    
    private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e)
    {
    
    }
    
    
    

    Method 2 Usage of Extended Class

    public class ExtendedTreeView : TreeView
    {
        public ExtendedTreeView()
            : base()
        {
            this.SelectedItemChanged += new RoutedPropertyChangedEventHandler(TreeView_SelectedItemChanged);
        }
    
        void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e)
        {
            if (SelectedItem != null)
            {
                SetValue(SelectedItem_Property, SelectedItem);
            }
        }
    
        public object SelectedItem_
        {
            get { return (object)GetValue(SelectedItem_Property); }
            set { SetValue(SelectedItem_Property, value); }
        }
        public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
    }
    
    
    

    Next just create the Treeview with the new custom class object.

    ExtendedTreeView  myTreeview = new ExtendedTreeView();
    

    Method 3 Usage of Behavior

    public class BindableSelectedItemBehavior : Behavior
    {
        #region SelectedItem Property
    
        public object SelectedItem
        {
            get { return (object)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;
            if (item != null)
            {
                item.SetValue(TreeViewItem.IsSelectedProperty, true);
            }
        }
    
        #endregion
    
        protected override void OnAttached()
        {
            base.OnAttached();
    
            this.AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged;
        }
    
        protected override void OnDetaching()
        {
            base.OnDetaching();
    
            if (this.AssociatedObject != null)
            {
                this.AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
            }
        }
    

    Next just attach the Treeview to the Behavior On Xaml file

    
        
            
        
    
    

    Or on Code Behind

    BindableSelectedItemBehavior selectedItemBehavior = new BindableSelectedItemBehavior();
    System.Windows.Interactivity.Interaction.GetBehaviors(treeview1).Add(selectedItemBehavior);
    

    Cordially

    提交回复
    热议问题