Как передать данные в функцию RoutedEventHandler - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над приложением C #, которое использует WPF, и в настоящее время ищу событие, когда объект TreeViewItem получает фокус. Я реализовал это очень простым способом с помощью следующего кода:

Назначение события:

TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing);

Фактический обработчик:

private void testing(object o, RoutedEventArgs e)
{
     MessageBox.Show("TESTING");             
}

Это было достаточно просто, но я также хотел бы иметь возможность использовать данные из объекта внутри метода обработчика событий. Что-то вроде этого:

TreeViewItem chr = new TreeViewItem();
chr.GotFocus += new RoutedEventHandler(testing(chr));

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

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы должны использовать событие SelectedItemChanged. Проверьте следующий пример:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        tree.SelectedItemChanged += Tree_SelectedItemChanged;

    }

    private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        MessageBox.Show(((TreeViewItem)e.NewValue).Header.ToString());
    }
}

Метод получит TreeViewItem в свойстве «NewValue» параметра e, поэтому MessageBox отобразит метку элемента.

0 голосов
/ 30 августа 2018

Используйте параметр sender, как показано ниже:

private void testing(object o, EventArgs e)
{
     var treeViewItem = o as TreeViewItem;          
}

Бывает, что объект-отправитель на самом деле является объектом, вызвавшим событие, TreeViewItem для вашего случая

0 голосов
/ 30 августа 2018
    private void SomeFunction()
    {
        TreeViewItem chr = new TreeViewItem();
        chr.GotFocus += testing; // Event directly, no wrapper.
    }

    private void testing(object sender, RoutedEventArgs e) // it's RoutedEventArgs, not EventArgs 
    {
        var chr = sender as TreeViewItem; // convert to item
        //do your rest work
    }
...