如何从Controller访问View事件

时间:2011-11-14 14:08:29

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

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

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

3 个答案:

答案 0 :(得分:6)

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

您可能会在Martin Fowlers网站阅读GUI Architectures时感兴趣。

答案 1 :(得分:5)

 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() { }
    }

答案 2 :(得分:3)

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