C# WinForms ModelViewPresenter:使用自定义事件参数或不使用自定义事件参数查看事件

C# WinForms ModelViewPresenter:使用自定义事件参数或不使用自定义事件参数查看事件,c#,winforms,events,mvp,eventargs,C#,Winforms,Events,Mvp,Eventargs,我正在使用MVP模式创建winforms应用程序。关于这种模式,我有一个非常具体的问题: 在本例中,我有一个(绑定)模型列表,我的视图被注入演示者(通过一个界面),现在我需要向该列表添加一个模型。列表本身是演示者的成员,并通过bindingsource显示在视图中。问题是我需要向视图网格中的选定模型添加一个子记录。因此,用户选择一个记录并单击一个按钮来添加一个新的子记录。演示者订阅事件“AddChild”,但我应该如何传递所选记录? 在我看来,我有两个选择 在返回所选行的视图中使用不带event

我正在使用MVP模式创建winforms应用程序。关于这种模式,我有一个非常具体的问题:

在本例中,我有一个(绑定)模型列表,我的视图被注入演示者(通过一个界面),现在我需要向该列表添加一个模型。列表本身是演示者的成员,并通过bindingsource显示在视图中。问题是我需要向视图网格中的选定模型添加一个子记录。因此,用户选择一个记录并单击一个按钮来添加一个新的子记录。演示者订阅事件“AddChild”,但我应该如何传递所选记录? 在我看来,我有两个选择

  • 在返回所选行的视图中使用不带eventargs+属性的事件
  • 将事件与包含选定行的自定义eventargs一起使用
  • 事件事件处理程序AddChild;
    AddChild?.Invoke(这是新的AddChildEventArgs(){SelectedRecord=grid.SelectedRow});
    
    我更喜欢第二种方法,但在这种情况下,我需要在视图中添加一些“逻辑”来调用事件。 此外,我还必须创建许多自定义事件参数

    这方面有什么“最佳实践”吗

        event EventHandler AddChild;
        Model SelectedRecord {get;set;}
    
        event EventHandler<AddChildEventArgs> AddChild;
        AddChild?.Invoke(this, new AddChildEventArgs() { SelectedRecord = grid.SelectedRow });