WPF如何将同一事件lambda表达式分配给两个不同的元素

时间:2017-01-18 10:54:04

标签: wpf events lambda

我有两个数据网格在后面的代码中定义了相同的属性。

var dtg = new DataGrid();

然后我通过lambda表达式分配一个事件(相当长的一个):

dtg.LoadingRow += (object sender, DataGridRowEventArgs e) =>
{
    ...
};

我不想复制。 那我怎么能这样做(伪代码):

var dtg2 = new DataGrid();
dtg2.LoadingRow = dtg.LoadingRow;

感谢名单

2 个答案:

答案 0 :(得分:2)

只需将lambda分配给变量:

EventHandler<DataGridRowEventArgs> handler =  (object sender, DataGridRowEventArgs e) =>
{
    ...
};
var dtg2 = new DataGrid();
dtg2.LoadingRow += handler;

或者,更好的是,命名您的处理程序 - 将其设置为类中的普通方法并使用其名称。

答案 1 :(得分:2)

为什么不用事件处理程序替换lambda表达式,即方法?:

private void OnLoadingRow(object sender, DataGridRowEventArgs e)
{
    //....
}

然后,您可以为多个DataGrid使用相同的事件处理程序:

dtg.LoadingRow += OnLoadingRow;
dtg2.LoadingRow += OnLoadingRow;

另一个选择是将整个lamda定义为@Rafal建议的变量或字段,但我不能真正理解为什么这比添加方法更好 - 至少在一般情况下是这样。