如何调用Control的事件处理程序?获取EventArgs值C#

时间:2016-12-08 12:04:57

标签: c# wpf wpf-controls wpfdatagrid

我正在尝试从另一个事件中调用OnCellEditEnding事件,

private void BillsTableRecords_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    // do stuff here
}

我的问题是我不知道如何将DataGridCellEditEndingEventArgs传递给方法,即下面方法中的e显然会出错,因为它引用了RoutedEventArgs不是DataGridCellEditEndingEventArgs

private void BillsRecordsCheckBox_OnChecked(object sender, RoutedEventArgs e)
{   
    BillsTableRecords_OnCellEditEnding(sender, e);
}

那么如何从DataGridCellEditEndingEventArgs获取值以便我可以传递方法中的值?请注意,此时要选择DataGrid单元格,因此它将包含一个值。

2 个答案:

答案 0 :(得分:1)

试试

private void BillsRecordsCheckBox_OnChecked(object sender, RoutedEventArgs e)
{   
    BillsTableRecords_OnCellEditEnding(sender, new DataGridCellEditEndingEventArg());
}

如果您想保留RoutedEventArgs中的参数,请将它们添加到DataGridCellEditEndingEventArg

的构造函数中

答案 1 :(得分:1)

我不推荐这种方法。事件处理程序将由事件调用;他们的签名并不适合独立通话。如果您在事件处理程序中执行业务代码,那么它也不是一个好的设计,因为您的事件处理程序是UI代码,应该与业务代码分开。

这里最好的方法是创建一个专门的方法来执行您想要的操作并从两个事件处理程序中调用它:

private void DoStuff(/* add the parameters you need*/) {
    //do stuff
}

private void BillsTableRecords_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    DoStuff();
}

private void BillsRecordsCheckBox_OnChecked(object sender, RoutedEventArgs e)
{   
    DoStuff();
}