Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用控件';什么是事件处理程序?获取EventArgs值C#_C#_Wpf_Wpf Controls_Wpfdatagrid - Fatal编程技术网

如何调用控件';什么是事件处理程序?获取EventArgs值C#

如何调用控件';什么是事件处理程序?获取EventArgs值C#,c#,wpf,wpf-controls,wpfdatagrid,C#,Wpf,Wpf Controls,Wpfdatagrid,我正在尝试从另一个事件调用一个onCelledEnding事件 private void BillsTableRecords_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { // do stuff here } 我的问题是我不知道如何将DataGridCellEditEndingEventArgs传递到方法中,即下面方法中的e显然会给出错误,因为它引用的是RoutedEventArgs而不是Dat

我正在尝试从另一个事件调用一个
onCelledEnding
事件

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
单元格,因此它将包含一个值。

请尝试

private void BillsRecordsCheckBox_OnChecked(object sender, RoutedEventArgs e)
{   
    BillsTableRecords_OnCellEditEnding(sender, new DataGridCellEditEndingEventArg());
}
如果要保留来自
RoutedEventArgs
的参数,请将它们添加到
DataGridCellEditEndingEventArg

的构造函数中

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

如果要保留来自
RoutedEventArgs
的参数,请将它们添加到
DataGridCellEditEndingEventArg

的构造函数中,我不推荐这种方法。事件处理程序将由事件调用;他们的签名并不适合单独通话。在事件处理程序中执行业务代码的情况下,这也是不好的设计,因为事件处理程序是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();
}

我不推荐这种方法。事件处理程序将由事件调用;他们的签名并不适合单独通话。在事件处理程序中执行业务代码的情况下,这也是不好的设计,因为事件处理程序是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();
}


使这两个事件都调用一个方法,该方法包含独立于EventArgs存在的所需参数列表,或传递一个带有适当成员集的新DataGridCellEditEndingEventArg(),或传递null。@AlexK。我这样做了,但我仍然需要方法中的
DataGridCellEditEndingEventArgs
值。这不是从另一个事件调用事件的正确方法。您可能需要以某种方式将复选框绑定到DataGrid您可能需要DataGridCellEditEndingEventArgs公开的属性中的值,请分别传递它们。@AlexK。我该怎么做?这就是我无法解决的问题。让这两个事件调用一个方法,该方法包含独立于EventArgs的必需参数列表,或者传递一个
新的DataGridCellEditEndingEventArg()
,并设置相应的成员集,或者传递null。@AlexK。我这样做了,但我仍然需要方法中的
DataGridCellEditEndingEventArgs
值。这不是从另一个事件调用事件的正确方法。您可能需要以某种方式将复选框绑定到DataGrid您可能需要DataGridCellEditEndingEventArgs公开的属性中的值,请分别传递它们。@AlexK。我该怎么做?这就是我无法解决的问题。当从
On\u Checked
处理程序调用
do stuff
方法时,如何获取
DataGridCellEditEndingEventArgs
值?您不应该使用
DataGridCellEditEndingEventArgs
调用该方法。将事件参数中的值作为参数传递给方法。这样,您就可以独立于事件参数。如果需要
DataGridCellEditEndingEventArgs
,则需要触发相应的事件@问题是,我需要它,因为复选框是datagrid的一部分,我需要row对象,以便更新该行的记录。我尝试了复选框列,但
oncelletending
在第一次单击时触发事件,选中复选框需要两次单击,因此,即使选中了columns复选框,它也会给您一个假值,因为第一个陈词滥调没有选中该复选框。当从
On_checked
处理程序调用
do stuff
方法时,如何获取
DataGridCellEditEndingEventArgs
值?您不应该使用
DataGridCellEditEndingEventArgs
来处理调用该方法。将事件参数中的值作为参数传递给方法。这样,您就可以独立于事件参数。如果需要
DataGridCellEditEndingEventArgs
,则需要触发相应的事件@问题是,我需要它,因为复选框是datagrid的一部分,我需要row对象,以便更新该行的记录。我尝试了checkbox列,但是
oncelletending
在第一次单击时触发事件,并且选中复选框需要两次单击,因此即使选中了columns复选框,它也会为您提供一个假值,因为第一次clich没有选中该框。