简体   繁体   English

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

[英]WPF How to assign the same event lambda expression to two different elements

I have two datagrids with same properties defined in code behind. 我有两个具有在后面的代码中定义的相同属性的数据网格。

var dtg = new DataGrid();

then I assign an event though lambda expression (quite a long one): 然后我通过lambda表达式分配一个事件(相当长):

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

which I do not want to replicate. 我不想重复。 So how can I do that (pseudocode): 那么我该怎么做(伪代码):

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

thanx 谢谢

simply assign your lambda to variable: 只需将您的lambda分配给变量:

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

Or, better, name your handler - make it to an ordinary method in your class and use its name. 或者,更好地命名您的处理程序-使它成为类中的普通方法并使用其名称。

Why don't you just replace the lambda expression with an event handler, ie a method?: 您为什么不只用事件处理程序(即方法)替换lambda表达式?:

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

You could then use the same event handler for several DataGrid's: 然后,您可以对多个DataGrid使用相同的事件处理程序:

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

The other option is to define your entire lamda as a variable or field as suggested by @Rafal but I can't really see why this would be better than adding a method - at least in the general case. 另一个选择是按照@Rafal的建议将整个lamda定义为变量或字段,但我真的看不出为什么这比添加方法更好-至少在一般情况下。

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

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