【问题标题】:Should a controller access UI components?控制器应该访问 UI 组件吗?
【发布时间】:2014-12-03 00:45:24
【问题描述】:

我正在使用 MVC 模式开发 WinForms 应用程序。我应该从控制器访问 UI 组件,例如树视图节点吗?

我想访问一个treeview选择的节点并改变它的标签之类的东西,我应该从控制器访问它还是违反MVC的原则?

唯一让我恼火的是treenode属于Windows.Forms命名空间,从MVC的角度来看,视图/表单相关的组件应该只在视图中使用,这就是我问的原因。

【问题讨论】:

    标签: c# winforms model-view-controller


    【解决方案1】:

    不,您不应该在控制器中控制视图的行为。您应该将数据传递给视图,并且视图应该根据接收到的数据决定进行调整。

    如果您想对视图中发生的事情做出反应,例如更改选定的树节点,您应该将数据发送回控制器。然后控制器可能会响应您的视图可以显示的其他数据。

    【讨论】:

    • 那么从树视图选定的节点(如文本/名称等)获取数据怎么样......它是否也违反 mvc 规则???
    • 视图应该将数据发送回控制器。例如,当更改选定的树节点时,您可能希望向控制器发送选择了哪个节点,控制器可能会将其他数据发送回您的视图,然后您的视图可以选择显示。
    • 让我清除它,我已将 treeview 事件与控制器绑定,当 treeview 上的任何事件触发控制器必须知道所选节点和有关该树节点的数据时,我必须访问所选节点名称/文本等信息,用于进一步的业务逻辑
    • 诚然,我没有在 WinForms 中使用 MVC 的经验,仅在 ASP.NET MVC 中,但事件绑定应该是视图的一部分,而不是控制器的一部分。带有预先生成的代码和您自己编写的代码的表单是一个视图。
    【解决方案2】:

    通过不直接调用视图从控制器访问 UI 组件。想象一下将树视图更改为其他内容,稍后再说基于 Telerik 的树视图,当这种情况发生时,您的控制器是否也必须更改其代码?但是对于 winforms,我相信 MVP 将适用,并且与我正在制作的 cmets 和 Stijn 所说的相得益彰。不妨看看两者的区别。

    MVC vs MVP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      相关资源
      最近更新 更多