Как вызвать treeView.SelectedItemChanged программно
В моей программе я хотел бы позвонить SelectedItemChanged
событие с использованием кода C# позади, я просто не уверен, что передать в качестве параметров. Это для 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? **/);
}
Кроме того, когда я пытаюсь построить это, я получаю эту ошибку компилятора, которая в значительной степени привела к этому вопросу...
Нет перегрузки для метода
TreeOne_SelectedItemChanged
принимает аргументы '0'
Я надеюсь, что это простой вопрос, но если я не предоставил достаточно информации или не был достаточно ясен, пожалуйста, дайте мне знать.
3 ответа
Добавление к ответу @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();
}
Обычный шаблон проектирования должен вызывать какой-то метод обработки, а не "вручную" запускать события:
private TreeOne_SelectedItemChaned(object sender,
RoutedPropertyChangedEventArgs<object> e) {
processChange();
}
Затем из-за вашего кода, вы просто позвоните processChange()
нет необходимости звонить TreeOne_SelectedItemChanged
,