【问题标题】:Creating UI components dynamically in a Model-PassiveView-Controller在 Model-PassiveView-Controller 中动态创建 UI 组件
【发布时间】:2012-02-05 03:09:39
【问题描述】:

在 GUI 应用程序中,我正在使用带有被动视图的 MVC,如 here 所述。

这种模式是模型-视图-控制器和模型-视图-展示器的另一种变体。与这些一样,UI 分为处理显示的视图和响应用户手势的控制器。被动视图的显着变化是视图完全被动,不再负责从模型中更新自身。因此,所有视图逻辑都在控制器中。因此,视图和模型之间的任一方向都没有依赖关系。

到目前为止,我的控制器注册为现有的、由被动视图在初始化时创建的静态组件的侦听器。现在,控制器需要动态创建可变数量的 UI 组件,具体取决于模型(具体来说,现在我说的是复选框网格 - 网格的尺寸是可变的 em>)。

这是我犹豫的地方:

  1. 是否应该在 Controller 中实现此动态 UI 创建代码?这将导致由于保持 View 不了解 Model 而导致的代码不太复杂,但部分呈现将由 Controller 决定。 .
  2. View 是否应该提出一种通用的、独立于模型的方式来按需创建 UI 组件,让 Controller 使用它并将侦听器注册到检索到的 UI 组件?在这里,控制器必须在模型对象和通用对象(具体而言,字符串,整数,...)之间来回转换。

【问题讨论】:

    标签: model-view-controller user-interface design-patterns language-agnostic passive-view


    【解决方案1】:

    每当视图需要创建动态控件时,它往往是针对某物的集合。这意味着您的 Presenter/Controller 不需要创建所有逻辑,而是在视图上调用一个方法来创建控件。

    在视图上:

    void PopulateUserOptions(IEnumerable<String> options)
    {
        foreach (var item in options)
        {
            \\create and add your controls to the form
        }
    }
    

    通过这种方式,控制器表达了何时应该创建控件等,但将其留给视图来决定如何做。

    【讨论】:

    • +1,谢谢。因此,您似乎将解决方案 2 视为最佳选择。但是你如何看待需要在 Controller 和 View 之间进行的来回转换,以使 View 不受 Model 依赖项的感染?
    • @fury:根据您需要在视图中显示的对象部分的复杂性,我会使用Tuple&lt;&gt; 或自定义类/结构里面有你需要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2011-12-07
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多