Binding et Getter Setter
Lors d’un développement ’rapide’ pour tester des fonctionalités WPF, j’ai créé une classe ‘Car’ avec des attributs en public.
public class Car
{
public String Name;
}
Et lorsque j’ai voulu binder cette attribut rien ne s’affichait.
DisplayMemberBinding="{Binding Name}"
A force de tatonement j’ai fais passer mon champ public en propriété public :
public String Name {get; set;}
et « O miracle » … le binding était fait ! J’avoue ne pas avoir compris tout de suite la différence puis un gentil-monsieur-d-un-forum m’a redirigé vers cette article : http://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx
Plus particulièrement paragraphe « What’s bindable ? ».
« You can bind to the entire object or public properties, sub-properties, and indexers of the object. Fields are not supported. »
Conclusion : Les champs publics c’est mal ! Parceque ce n’est pas ‘Bindable’, parceque c’est contraire au conventions (on le savait) parceque tout le monde peut les bidouiller et qu’aucun controle ne peut être fait. La propriété va faire référence à un champ privé en passant par les getters/setters. Ainsi on pourra effectuer des modifications sur une donnée en la recevant ou avant de l’envoyer (filtrage, vérification, calcul, conversion … ).
