我正在尝试查看是否可以使用委托事件并重复使用它们,这样我就不必进行多次点击事件。现在我有以下......
namespace EventsWPF
{
public partial class MainWindow : Window
{
public delegate void MyEvent(object sender, RoutedEventArgs e);
public MainWindow()
{
InitializeComponent();
btn1.Click += MyEvent;
btn2.Click += MyEvent;
}
}
}
这是正确的方法吗?或者我是否以错误的方式思考这个问题?我知道你可以使用Lambda表达式作为事件处理程序。但是如果我有多个事件,那么当我可以重用一个委托时,我不想为每个处理程序创建多个Lamda表达式。
答案 0 :(得分:1)
是的,如果两个按钮应该具有相同的逻辑运行;然后附加相同的处理程序完全正常。你不能通过附加delegate
类型来做到这一点;你需要一个实际的方法(如@hoodaticus所述)。
如果是在WPF中:
然而,通常情况下,两个按钮不会做同样的事情,你无法逃避这一点。更常见的是,两个按钮执行相同的操作但具有不同的参数。不幸的是,WinForms风格的方法在这里会非常痛苦(你可以查看sender
但是.... ewww)。
在这种情况下(实际上,在所有情况下)你真的想利用MVVM模式并为你的按钮设置命令(而不是点击处理程序)。然后,您可以使用CommandParameter
将自定义数据块放入处理程序中。
答案 1 :(得分:1)
@Mapper
public interface MyMapper {
ShoppingCart map(Cart cart, @Context CycleAvoidingMappingContext context);
ShoppingCartSample map(CartSample cart, @Context CycleAvoidingMappingContext context);
}
在这里是不必要的,因为你没有创建自己的事件,只是订阅别人的事件。 MyEvent
关键字声明方法签名和返回类型 - 它不创建实例或定义方法体。
以下是重用lambda表达式的方法:
delegate