【问题标题】:What is the correct way to pass controls around?传递控件的正确方法是什么?
【发布时间】:2016-03-21 11:01:45
【问题描述】:

我正在创建一个新的 winforms 应用程序,该应用程序将具有加载矩阵数据的 datagridviews,并且我希望用户能够对数据执行一系列操作,例如显示/隐藏列、编辑单元格值和过滤也。

我想过使用 MVP 模式(模型、视图、演示者)。

我想创建一个演示者类,它可以处理所有逻辑(即用户触发的任何事件),最终在演示者中处理原始数据(矩阵)。到目前为止这似乎是合乎逻辑的,但我的问题是如果我想自己传递控件(如 datagridviews)我该怎么办?应该将这些控件发送到演示者类还是这种设计不好?

也许最好找到只修改原始数据然后更新我的数据网格视图的方法?

【问题讨论】:

    标签: c# .net winforms datagridview user-controls


    【解决方案1】:

    传递控件不是一个好主意。如果您要使用诸如“MVP”之类的模式,那么您应该让“模型”包含“视图”的表示。在这种情况下,如果有与它属于模型的一组数据有关的各种详细信息。然后传递模型。

    也许最好找到只修改原始数据然后更新我的数据网格视图的方法?

    所以,要回答这个问题,“是”。使用模型包装数据并传递它。

    更新

    具体来说,WinForms 控件属于容器,因为它们是引用类型并且有很多暴露的 events,所以您冒着将引用从一个 Form 传递到另一个 Form 的巨大风险。现在,假设第一个Form 已完成使用并关闭和处理,它会终止对控件的引用并尝试取消连接events。你知道我要去哪里吗?尝试正确清理引用并取消连接事件处理程序很快就变成了一场噩梦,而且由于控件在设计上属于一个容器,因此它打破了这种范式。

    最好有关注点分离。如果您需要一个视图来获取某些数据,最好总是传递数据本身...

    【讨论】:

    • 您能否解释一下为什么这不是一个好主意?现在我想了解这一点,因为我正在创建一些具有良好设计的东西。
    猜你喜欢
    • 2023-03-06
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多