4

我正在尝试使用 MVP 模式创建一种主/详细 UI。我有通常的嫌疑人:

interface IMainView{}
class MainView: Form, IMainView{}

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

我还有一个 UserControl,它也是它自己的 MVP 三元组的视图:

interface ISubView{}
class SubView: UserControl, ISubView{}

interface ISubPresenter{}
class SubPresenter{}

MainPresenter 创建了 SubPresenter 的实例,而 SubPresenter 又创建了 SubView 的实例。我的问题是视图不包含对彼此的引用,甚至不知道彼此存在。他们只知道他们自己的演示者,但我想将一个用户控件视图附加到另一个表单视图。这是否可以做到并且仍然保持每个视图对彼此的无知?

到目前为止,所有视图都将每个演示者所需的属性公开为系统类型,因此如果 ListBox 更改为 ComboBox 或 RadioGroup,则演示者不会受到影响。如果可能的话,我想保持这种方式,但如果我别无选择,我愿意打破这种模式。

我这样做的原因是 MainView 向用户展示了一组对象。每个对象可以是几个(超过 50 个)不同的类之一。所有人都将实现一个通用接口,但用于操作每个对象的 UI 将随底层类的不同而不同。

顺便说一句,这是一个针对 .NET 2.0 的 Winforms 应用程序(尽管它被编译为 C# 3.0)

4

1 回答 1

2

我通过让子演示者将其视图的引用传递给主演示者来解决这个问题,然后主演示者将其传递给其视图,然后将其分配给一个空面板。

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

它作为普通的旧对象传递,因此演示者都不需要包含对 winforms 命名空间的引用。mainView 只是假设它是 UserControl 的后继者,并将其转换为这样。

于 2009-09-17T20:23:16.493 回答