2013-08-20 5 views
0

В моей программе я хотел бы позвонить на событие SelectedItemChanged с использованием кода C#, я просто не уверен, что передать в качестве параметров. Это для TreeViewItem.Как вызвать treeView.SelectedItemChanged программно

//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? **/); 
} 

Кроме того, когда я пытаюсь построить это я получаю эту ошибку при компиляции, что в значительной степени привело к этому вопросу ...

Нет перегрузки метода TreeOne_SelectedItemChanged принимает аргументы «0»

Я надеюсь, что это простой вопрос, но если я не предоставил достаточной информации или не был достаточно ясным, сообщите мне.

+0

Можете ли вы показать больше кода? –

+0

Конечно, проверьте мой вопрос. –

ответ

1

Добавление ответа @Bart Friederichs' и при условии, что у вас есть ссылка на ваш TreeView, вы можете добавить следующий метод:

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

Тогда вы можете просто позвонить в этом, где бы вы хотели:

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

private void TreeOne_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    SetSelectedItem(); 
} 
+0

Это тоже хорошо работает, спасибо. Я изменил свой ответ на этот вопрос, потому что сейчас использую это. –

0

Обычный шаблон дизайна будет вызывать какой-то метод обработки, а не к «вручную» пожары:

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

Затем из жгутов код, вы просто звоните processChange(), нет необходимости звонить TreeOne_SelectedItemChanged.

+0

Так где же 'processChange()' на самом деле идет? Если вы посмотрите на мой код, вы увидите, что я выполняю операции в 'SelectedItemChanged'. Я все еще хочу, чтобы это произошло. –

+0

В вашем случае это интересно. Откуда вы получите 'e.NewValue' при вызове из' TreeOne_MouseRightButtonDown'? –

+0

Вначале я просто попытался использовать 'MainWindowViewModel.SelectedItem = e.NewValue как TreeViewItem' в моем событии' TreeOne_MouseRightButtonDown', но я получил ошибку компилятора, связанную с 'NewValue'. Вот почему я пытаюсь называть 'SelectedItemChanged' вместо этого. –

0

попытка вызвать

TreeOne_SelectedItemChanged (NULL, NULL);

+0

Это приведет к 'NullPointerException' на' e.NewValue'. –

+0

Это так, но я только что сказал 'if (e == null) return;' и 'if (sender == null) return;' –

Смежные вопросы