【问题标题】:How should I add controls when using WinForms and MVP?使用 WinForms 和 MVP 时应该如何添加控件?
【发布时间】:2012-03-27 17:04:58
【问题描述】:

我们在这里使用 MVP 设计模式,并且我们采用了 Presenter-per-UserControl 样式。

This answer 建议了两种不同风格的 Presenter 构造:

  1. 每个演示者都会实例化它拥有的所有子演示者。
  2. 控制器类实例化所有演示者并处理它们之间的通信。

不幸的是,没有提及视图的连接方式和位置。在另一个项目中,我使用工厂模式来创建我的演示者并使用dependency injection 向他们传递视图。视图是在视图工厂中创建的,该工厂使用相应的 UserControl 实例化视图,然后使用 Controls.Add 添加到表单中。

根据我从第一个链接收集到的信息,Visual Studio 设计器用于添加 UserControls - 这很好,但似乎演示者会不必要地耦合到视图层。

那么我应该如何添加我的子视图并连接 View-Presenter 对?

【问题讨论】:

    标签: winforms mvp


    【解决方案1】:

    我倾向于这样做的方式是在子视图的“主”视图中放置一个占位符,我通常使用面板控件。

    我总是连接我的 MVP,以便 Presenter 创建视图。永远不要反过来(我讨厌那种风格)演示者然后公开一个返回视图的 GetView() 方法。

    然后主演示者可以创建一个子演示者获取它的视图并告诉主视图呈现它。这是通过主视图上的一个方法完成的,该方法将子视图添加到面板控件的控件集合中。

    【讨论】:

    • 这(或多或少)是我使用的确切方法,尽管有一个属性。对我们来说不幸的是,我们编写的环境要求 WinForms 项目是带有启动表单的启动项目,因此必须至少有一个表单才能启动该过程。尝试解耦类时会变得更加棘手。
    • 您能否给出演示者如何创建视图的示例代码。我一直认为 View 必须创建 Presenter,因为页面是第一个访问点。谢谢。
    猜你喜欢
    • 2021-07-06
    • 2016-08-02
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多