Как вызвать 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();
}

Попробуй позвонить

TreeOne_SelectedItemChanged(null, null);

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

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

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

Другие вопросы по тегам