E-mail
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); TopEmployeeController controller = new TopEmployeeController(); Application.Run(controller.View as Form); }
private ITopEmployeeView _view; private Employee _employee; private bool _monitoring; public TopEmployeeController() { _employee = new Employee(); _view = new TopEmployeeForm(this, _employee); }
// view public TopEmployeeForm(ITopEmployeeController controller, Employee model) { _controller = controller; _model = model; //Let the model know that this view is interested if the model change _model.OnPropertyChange += new Action(UpdateView); InitializeComponent(); }
// view public TopEmployeeForm(ITopEmployeeController controller, Employee model) { _controller = controller; _model = model; //Let the model know that this view is interested if the model change _model.OnPropertyChange += new Action(UpdateView); InitializeComponent();
// controller public void GetTopEmployee() { if (!_monitoring) { _monitoring = true; _employee.MonitorChanges(); } }7. MonitorChanges does some waiting code, then every second calls FirePropertyChange(). Which calls model.OnPropertyChange. Which is really a delegate to View.UpdateView
// model public event Action OnPropertyChange; private void FirePropertyChange() { var propChange = OnPropertyChange; if (propChange != null) { OnPropertyChange(); } }
// view public void UpdateView() { // to do with threading if (this.InvokeRequired) { this.Invoke(new Action(UpdateView)); } else { TopEmployeeName = _model.FullName; } }
Remember Me
a@href@title, strike