我正在尝试使用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的一个decedent并将其强制转换.