【问题标题】:How to access events of View from Controller如何从 Controller 访问 View 的事件
【发布时间】:2011-12-28 16:42:20
【问题描述】:

我的问题是关于在 winforms 中实现 MVC 模式

我了解到控制器对象负责处理视图中引发的事件。谁能告诉我控制器如何对视图中的文本输入或按钮按下事件做出反应?我的意思是控制器如何知道某些事件发生了而不在视图中进行处理,因为这些控件(文本框,按钮)是私有的。

【问题讨论】:

  • 你能展示你的winforms是如何设置的吗?

标签: c# .net winforms model-view-controller


【解决方案1】:

这个想法是视图捕获事件,然后调用控制器中的适当函数。在 Windows 窗体中,这意味着您将附加一个事件处理程序,例如“button_click”,然后调用 controller.doFoo()。

您可能有兴趣阅读 Martin Fowlers 网站上的 GUI Architectures

【讨论】:

  • 我痴迷于(在阅读文章后)视图变得愚蠢的想法以及智能控制器将有关它捕获的视图事件的信息传递给视图。我想如果我添加 button_click 事件视图代码隐藏后面的处理程序,MVC 纯粹主义者会向我扔石头。
【解决方案2】:

对于 WinForms,我认为您应该考虑使用 MVP 模式。

【讨论】:

    【解决方案3】:
     public partial class Form1 : Form
        {
            private Controller controller;
            public Form1()
            {
                InitializeComponent();
            }
            //Dependency Injection
            public Form1(Controller controller):this()
            {
                //add more defensive logic to check whether you have valid controller instance
                this.controller = controller;
            }
            private void button1_Click(object sender, EventArgs e)
            {
                if (controller != null)
                    controller.MethodA();
            }
        }
        //This will be another class/ controller for your view.
        public class Controller
        {
            public void MethodA() { }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多