我正在尝试使用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的实例,然后创建SubView的实例。我的问题是视图不包含彼此的引用,甚至不知道彼此存在。他们只知道他们自己的演示者,但我想将一个UserControl视图附加到另一个作为Form的视图。这是否可能并且仍然保持每个视图对彼此的无知?

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

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

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

有帮助吗?

解决方案

我解决了这个问题,让subpresenter将对其视图的引用传递给主演示者,然后将其传递给视图,然后将其分配给空面板。

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

它作为一个普通的旧对象传递,因此两个演示者都不需要包含对winforms命名空间的引用。 mainView简单地假定它是UserControl的一个后果,并将其强制转换为它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top