0

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.

Sheridan
  • 68,826
  • 24
  • 143
  • 183
Eric after dark
  • 1,768
  • 4
  • 31
  • 79

3 Answers3

1

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();
}
Sheridan
  • 68,826
  • 24
  • 143
  • 183
0

The usual design pattern would be to call some kind of processing method, and not to "manually" fire events:

private TreeOne_SelectedItemChaned(object sender, 
                        RoutedPropertyChangedEventArgs<object> e) {
    processChange();
}

Then, from withing your code, you just call processChange(), no need to call TreeOne_SelectedItemChanged.

Bart Friederichs
  • 33,050
  • 15
  • 95
  • 195
  • So where does `processChange()` actually go? If you look at my code you'll see that I have operations being performed under `SelectedItemChanged`. I still want those to happen. – Eric after dark Aug 20 '13 at 13:07
  • In your case it is interesting. Where would you get `e.NewValue` from when calling from `TreeOne_MouseRightButtonDown` ? – Bart Friederichs Aug 20 '13 at 13:08
  • Well originally I just tried using `MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem` in my `TreeOne_MouseRightButtonDown` event, but I received a compiler error having to do with `NewValue`. That's why I am trying to call `SelectedItemChanged` instead. – Eric after dark Aug 20 '13 at 13:12
0

try to call

TreeOne_SelectedItemChanged(null, null);

Ali Baghdadi
  • 648
  • 1
  • 5
  • 17