Как передать объект в обработчик событий нажатия кнопки в WPF? C# - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю простое приложение ToDoList, используя C# и WPF. Цель состоит в том, чтобы при нажатии кнопки. Текст в TextBox будет добавлен как новый элемент в List, который является существующим экземпляром объекта.

Для этого я обновил сигнатуру обработчика события нажатия кнопки, чтобы включить параметр для передачи объекта List. , Когда я компилирую этот код, я получаю сообщение об ошибке из моего XAML-файла в строке, которая содержит Click = "AddTaskButton_Click"

Ошибка: Нет перегрузки для AddTaskButton_Click 'соответствует делегату' RoutedEventHandler '

Что может быть причиной этой ошибки? Я видел другие примеры кода, где это прекрасно компилируется. Есть ли другой способ выполнить sh передачу «данных» или объекта в обработчик событий в WPF? Я новичок в WPF.

XAML

<Button
x:Name="AddTaskButton"  Content="+ Add"  
Click="AddTaskButton_Click">
</Button>

Backend C#

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        List<string> taskList = new Tasklist {"Task A", "Task B", "Task C"}

        AddTaskButton.Click += (object sender, RoutedEventArgs e) => { AddTaskButton_Click(sender, e, taskList); };
    }

    private void AddTaskButton_Click(object sender, RoutedEventArgs e, List<string> taskList)
    {
        // do something
    }
}

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Используйте этот код XAML

<Button
x:Name="AddTaskButton"  Content="+ Add" >
</Button>

Вы также добавили обработчик событий в код XAML. Вы можете добавлять только обработчики событий с 2 ​​параметрами: object и RoutedEventArgs. Ваш XAML-код добавляет другой обработчик событий к AddTaskButton_Click, который имеет 3 th тип параметра List<string>.

Сохраните код C# как есть. Он также добавляет корректный обработчик событий, используя лямбда-выражение в конструкторе. Но добавьте точку с запятой, где вы объявляете taskList и измените Tasklist (с большой буквы T и небольшой l) на List<string>.

0 голосов
/ 19 февраля 2020

Попробуйте это

<Button x:Name="AddTaskButton" Content="+ Add" />
public partial class MainWindow : Window
{
    // make your list globally visible
    private List<string> taskList = new Tasklist {"Task A", "Task B", "Task C"}

    public MainWindow()
    {
        InitializeComponent();
        AddTaskButton.Click += AddTaskButton_Click;
    }

    private void AddTaskButton_Click(object sender, RoutedEventArgs e)
    {
        taskList.Add(); // add your values here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...