【问题标题】:Design pattern for ListView control having 2 states?ListView 控件的设计模式有两种状态?
【发布时间】:2012-04-11 15:07:01
【问题描述】:

我在 Windows 窗体中有 ListView 控件,这是由于在图标视图或详细信息视图中显示项目列表。我想分离 ListView 状态逻辑并创建 2 个状态类 IconsState 和 DetailsS​​tate 从 IState 继承它们,并从 UI 窗口调用所有方法。

在详细视图中有 RetrieveVirtualItem 事件,在图标视图中有 DrawItem 事件。为了从 UI 中存在的 IState 变量调用它们,两个州的后代类都必须实现它们。在 DetailsS​​tate 中拥有 DrawItem 只会返回。 IconsState 中的 RetrieveVirtualItem 也是如此。

是否有另一种设计方法可以避免在状态中实现空方法?

【问题讨论】:

    标签: c# design-patterns user-interface


    【解决方案1】:

    是的,有更好的方法。强制一个类有一个不应该在其中的成员是一种设计气味,即用你的话来说“在 DetailsS​​tate 中拥有 DrawItem 只会返回”。

    或者,您可以使用 MVP 模式,这将使您具有更高的可测试性。在 MVP 的被动视图变体中,您将拥有一个模型、两个哑视图和一个演示者,该演示者根据用户的选择决定渲染哪个视图。

    关于 MVP 的其他资源:
    SO tag for MVP
    Passive view sample
    MVP examples for Windows Forms

    【讨论】:

    • 好吧,我使用 MVP 和具有 ListView 控件的 windows 窗体已经是视图。我需要在我的视图窗口窗体中简单地分离 ListView 控件行为。我无法想象这里有 2 个 MVP,也无法仅为我的 Windows 窗体视图中的 ListView 控件创建另一个 MVP。
    • AFAI 明白了,您的 ListView 视图可以是图标视图或详细信息视图,如果是这种情况,您可以在 MVP 中使用说 MVP,换句话说,父视图可以显示任何一个视图,使 MVP 视图可组合应该没有任何问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2013-08-27
    • 2010-12-12
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多