Как получить доступ к событиям View из контроллера - PullRequest
4 голосов
/ 14 ноября 2011

Мой вопрос касается реализации шаблона MVC в winforms

Я узнал, что объект контроллера отвечает за обработку событий, возникающих в представлении.Может ли кто-нибудь сказать мне, как контроллер может реагировать на ввод текста или нажатие кнопки в представлении?Я имею в виду, как контроллер может узнать, что какое-то событие произошло без обработки в представлении, поскольку эти элементы управления (текстовое поле, кнопка) являются частными для просмотра.

Ответы [ 3 ]

6 голосов
/ 14 ноября 2011

Идея состоит в том, что представление ловит событие и затем вызывает соответствующую функцию в контроллере.В Windows Forms это означает, что вы присоедините обработчик события, например, к «button_click», который затем вызовет controller.doFoo ().

Возможно, вы заинтересуетесь чтением GUI Architectures вСайт Мартина Фаулерса.

5 голосов
/ 14 ноября 2011
 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() { }
    }
3 голосов
/ 14 ноября 2011

В случае WinForms, я думаю, вы должны рассмотреть возможность использования шаблона MVP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...