【问题标题】:How to call a Control's event handler? Get EventArgs value C#如何调用控件的事件处理程序?获取 EventArgs 值 C#
【发布时间】:2016-12-08 12:04:57
【问题描述】:

我正在尝试从另一个事件中调用 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 单元格已被选中,因此它将包含一个值。

【问题讨论】:

  • 使两个事件都调用一个方法,其中包含独立于 EventArgs 的所需参数列表,或者传递带有适当成员集的 new DataGridCellEditEndingEventArg(),或者传递 null。
  • @AlexK。我这样做了,但我仍然需要方法中的 DataGridCellEditEndingEventArgs 值。
  • 这不是从另一个事件调用事件的正确方法。您可能需要以某种方式将您的复选框绑定到 DataGrid
  • 您可能需要 DataGridCellEditEndingEventArgs 公开的属性中的值,单独传递它们。
  • @AlexK。我怎么做?那是我无法解决的问题。

标签: c# wpf wpf-controls wpfdatagrid


【解决方案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();
}

【讨论】:

  • On_Checked处理程序调用do stuff方法时如何获取DataGridCellEditEndingEventArgs值?
  • 您不应该使用DataGridCellEditEndingEventArgs 来调用该方法。您将事件 args 中的值作为参数传递给您的方法。这样你就可以独立于你的事件参数。
  • 如果你需要DataGridCellEditEndingEventArgs,你需要触发它的适当事件。 @KyloRen
  • 问题是,我需要它,因为复选框是数据网格的一部分,我需要行对象,以便我可以更新该行的记录。我尝试了 checkbox column ,但OnCellEditEnding 在第一次单击时触发事件,并且选中一个复选框需要两次单击,因此即使选中了 columns 复选框,它也会给你一个错误的值,因为第一个陈词滥调没有选中该框。
【解决方案2】:

试试看

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2015-04-19
    相关资源
    最近更新 更多