gpt4 book ai didi

c# - 如何将 UserControl 附加到 MVP 模式中的窗体?

转载 作者:行者123 更新时间:2023-11-30 12:37:23 25 4
gpt4 key购买 nike

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

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

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

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

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

interface ISubPresenter{}
class SubPresenter{}

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

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

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

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

最佳答案

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

subView
|
V
subPresenter
|
V
mainPresenter
|
V
mainView

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

关于c# - 如何将 UserControl 附加到 MVP 模式中的窗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com