繁体   English   中英

如何将对象传递给 WPF 中的按钮单击事件处理程序? C#

[英]How do I pass an object to a button click event handler in WPF? C#

我正在使用 C# 和 WPF 构建一个简单的 ToDoList 应用程序。 目标是当按钮被点击时。 TextBox 中的文本将作为现有对象实例 List 中的新元素添加。

为此,我更新了 Button 单击事件处理程序的签名,以包含一个参数来传递 List 对象。 当我编译此代码时,我的 XAML 文件在包含 Click="AddTaskButton_Click" 的行处抛出错误

错误: “AddTaskButton_Click”没有重载匹配委托“RoutedEventHandler”

什么可能引发此错误? 我已经看到其他代码示例编译得很好。 是否有另一种方法来完成将“数据”或对象传递给 WPF 中的事件处理程序? 我是 WPF 的新手。

XAML

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

后端 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
    }
}

我正在使用C#和WPF构建一个简单的ToDoList应用。 目的是单击按钮时。 TextBox中的文本将作为现有对象实例的List中的新元素添加。

为此,我已经更新了Button click事件处理程序的签名,以包括一个传递List对象的参数。 当我编译此代码时,我的XAML文件在包含Click =“ AddTaskButton_Click”的行上引发了错误

错误: “ AddTaskButton_Click”没有重载匹配委托“ RoutedEventHandler”

什么可能引发此错误? 我看过其他可以编译的代码示例。 还有另一种方法可以完成将“数据”或对象传递到WPF中的事件处理程序吗? 我是WPF的新手。

XAML

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

后端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
    }
}

使用此 XAML 代码

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

您还在 XAML 代码上添加了一个事件处理程序。 您只能添加带有 2 个参数的事件处理程序:一个object和一个RoutedEventArgs 您的 XAML 代码将其他事件处理程序添加到AddTaskButton_Click女巫的第三参数类型为List<string>

保持 C# 代码不变。 它还使用构造函数中的 lambda 表达式以正确的方式添加了一个事件处理程序。 但是在声明taskList地方添加一个分号,并将Tasklist (带有大写的T和一点l更改为List<string>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM