I’m primarily from an ASP.Net background with some MVC. I’ve also done a little Silverlight and MVVM, however I’m now about to move into Winforms which I have very little experience of, so I’m wondering how to tackle MVP.
Typical MVP samples show the presenter setting a view property (via some kind of IView interface), with the concrete view putting that property value into a textbox for example. Instead of this archaic approach, can one utilise INotifyPropertyChanged in MVP, and if so how? A very quick example would be really useful!
If I was to create a model that implemented INotifyPropertyChanged then isn’t this more like MVVM? (i.e. the presenter updates the model, and via the magic of INotifyPropertyChanged the view gets updated). Yet everywhere I’ve read about MVVM and Winforms, people say it isn’t suitable. Why? My understanding is that you can databind just about any control’s property, so what’s Winforms missing? I’m trying to understand the shortcomings of databinding in Winforms compared to WPF, and why MVVM can’t be used, as it seems simpler to implement than MVP.
Thanks in advance
Andy.
I have just checked up how data binding in WinForms uses INotifyPropertyChanged.
The data binding through the BindingSource does really support INotifyPropertyChanged if the DataSource object of the BindingSource or model property corresponding to DataMember implements this. You can use M. Fowlers supervising presenter / controller to full extent here:
You don’t even need a hand-written code, the BindingSource synchronizes the view with the model properties in both directions (model -> view and view -> model), and if the model supports INotifyPropertyChanged then the view will be updated automatically.
The code constructs I have used so far:
During view initialization:
this.bindingSource.DataSource = this.presenter;
Designer-generated code:
this.textBoxPhone.DataBindings.Add(new System.Windows.Forms.Binding(“Text”, this.bindingSource, “Model.Phone”, true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
The model class:
The presenter class: