Winforms MVP 网格事件问题

2024-01-12

我正在尝试为 WINFORMS 实现 MVP 模式。它是一个简单的按钮和网格,单击按钮时,网格将加载,用户可以将值填充到网格中。

对于我的按钮单击事件,我有这样的事情:

_presenter.LoadGrid();

这简单明了。

我的问题是,关于网格...... 我计划触发行单击事件...用于启用/禁用网格的特定列/行等的后续输入字段。

我知道演示者不应包含任何 GUI 元素,并且视图(表单)不应真正包含逻辑?

因此,要触发 GridRowClick 事件,我需要根据业务规则(逻辑)操作网格(GUI)。我在让演示者处理该单击事件或表单的逻辑之间迷失了方向?

如果演示者要处理点击事件,那不是包括gui组件吗? 如果视图要处理点击事件,则字段名称等都是业务驱动(逻辑),根据业务层返回的数据表动态绑定。

任何建议将不胜感激。

Cheers


MVP(至少)有两种变体。

  • 被动视图模式
  • 监督控制器模式

被动视图,顾名思义,将 UI 视为用户和应用程序之间或多或少的被动界面。它将尽可能多的可测试代码移至演示者,让视图仅处理最基本的 UI 更新。

监督控制器通过让视图处理数据同步来赋予视图更多的责任。这通常是通过数据绑定来完成的。

在任何一种情况下,事件处理都是通过委托给演示者方法来完成的:

EventHandler()
{
    presenter.HandleEvent();
}

如果处理事件需要对表单进行更改,则将需要更新的内容公开为属性:

public string PropertyThatNeedsToBeUpdated
{
    get
    {
        return Control.Property;
    }
    set
    {
        Control.Property = value;
    }
}

对于被动视图来说,网格是一个障碍。它们的复杂性使得捕获所有可能的事件变得很麻烦。使用监督控制器,网格变得更加容易,因为您将数据同步留给数据绑定控件。

您必须做出判断,哪个更适合您的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winforms MVP 网格事件问题 的相关文章

随机推荐