使用WinForms和MVP时应该如何添加控件?

时间:2012-03-26 21:50:17

标签: winforms mvp

我们在这里使用MVP设计模式,我们已经采用了persenter-per-UserControl风格。

This answer提出了两种不同风格的演示者构建:

  1. 每个演示者都会实例化其拥有的所有儿童演示者。
  2. 控制器类实例化所有演示者并处理它们之间的通信。
  3. 不幸的是,没有提到视图的连接方式和位置。在另一个项目中,我使用工厂模式来创建演示者并使用dependency injection传递视图。视图在视图工厂中创建,该工厂使用适当的UserControl实例化视图,然后使用Controls.Add将其添加到表单中。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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