Search code examples
c#wpftreeviewselecteditemchanged

How to call treeView.SelectedItemChanged programmatically


In my program I would like to call to a SelectedItemChanged event using c# code-behind, I am just unsure about what to pass as parameters. This is for a TreeViewItem.

//Gets selected item in TreeView
private void TreeOne_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem;
}

//I'm calling the SelectedItemChanged event from a RightButtonDown event
private void TreeOne_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeOne_SelectedItemChanged(/* What would go here? **/);
}

Also, when I try to build this I receive this compiler error that pretty much led to this question...

No overload for method TreeOne_SelectedItemChanged takes '0' arguments

I'm hoping that this is an easy question, but if I have not provided enough information, or haven't been clear enough please let me know.


Solution

  • Adding to @Bart Friederichs' answer and assuming that you have a reference to your TreeView, you could add the following method:

    private void SetSelectedItem()
    {
         MainWindowViewModel.SelectedItem = TreeOne.SelectedItem;
    }
    

    Then you can simply call this from wherever you like:

    private void TreeOne_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        SetSelectedItem();
    }
    
    private void TreeOne_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        SetSelectedItem();
    }