![](/img/trans.png)
[英]how do I pass a reference to an object via button_click in 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.