如何调用控件';什么是事件处理程序?获取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没有选中该框。