如何将UserControl附加到MVP模式中的表单?
-
05-07-2019 - |
题
我正在尝试使用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的一个后果,并将其强制转换为它。
不隶属于 StackOverflow