Je sais qu'il existe des modèles comme MVC pour séparer la vue de la logique, cependant, je ne sais pas à quel point ils sont courants dans les applications Winform.
Pour une application C # Winform, je peux commencer par un Form
et y ajouter progressivement des composants d'interface utilisateur, puis pour les événements des composants, (click
, textchanged
...) J'appelle mes fonctions, ou y écris directement ma logique!
Je sais que c'est une mauvaise habitude, mais je ne sais pas quelle est la meilleure façon de démarrer un tel projet dans Visual Studio (un modèle, un framework, un point de départ), MVC est-il la seule solution? Dois-je le faire pour n'importe quel projet?!
J'aimerais recevoir des directives ou un cadre léger pour commencer.
Le modèle MVVM (Model-View-ViewModel) peut être utilisé dans le Winforms
Modèle
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
}
ViewModel
public class PersonViewModel : INotifyPropertyChanged
{
private Person _Model;
public string FirstName
{
get { return _Model.FirstName; }
set(string value)
{
_Model.FirstName = value;
this.NotifyPropertyChanged("FirstName");
this.NotifyPropertyChanged("FullName"); //Inform View about value changed
}
}
public string LastName
{
get { return _Model.LastName; }
set(string value)
{
_Model.LastName = value;
this.NotifyPropertyChanged("LastName");
this.NotifyPropertyChanged("FullName");
}
}
//ViewModel can contain property which serves view
//For example: FullName not necessary in the Model
public String FullName
{
get { return _Model.FirstName + " " + _Model.LastName; }
}
//Implementing INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
Vue
public class PersonView: Form
{
//Add two textbox and one label to the form
//Add BindingSource control which will handle
//ViewModel and Views controls changes
//As viewmodel you can use any type which of course have same named properties
public PersonView(Object viewmodel)
{
this.InitializeComponents();
this.ViewModelBindingSource.DataSource = viewmodel;
this.InitializeDataBindings();
}
private void InitializeDataBindings()
{
this.TextBoxFirstName.DataBindings.Add("Text", this.ViewModelBindingSource, "FirstName", true);
this.TextBoxLastName.DataBindings.Add("Text", this.ViewModelBindingSource, "LastName", true);
this.LabelFullName.DataBindings.Add("Text", this.ViewModelBindingSource, "FullName", true);
}
}
En savoir plus sur la liaison de données dans Winforms à partir de MSDN
De toute évidence, WinForms ne prend pas en charge nativement un modèle de conception par rapport à un autre - celui qui pourrait ne pas fonctionner est MVVM car vous ne pouvez pas "lier" des données au modèle de vue et le faire mettre à jour les données directement.
Sinon - je tenterais WinForms avec MVP - je l'ai déjà vu - voici un lien à consulter https://winformsmvp.codeplex.com/