18
avril
2007
DataBinding changer par code la valeur d’une propriété bindée d’un contrôle
avril
2007
Quand, par code, on veut modifier la valeur d’une propriété P1 d’une classe C bindée à une propriété P2 d’un contrôle, il faut, soit que la classe C implémente l’interface INotifyPropertyChanged et appeler l’évènement PropertyChanged dans le set de P1, soit que C ait un évènement <nom de la propriété + Changed> et l’appeler là aussi dans le set de P1 pour que la propriété du contrôle soit automatiquement mies à jour.
J’ai eu à faire à un cas assez particulier : je voulais, par code, modifier la propriété du contrôle. Comment faire en sorte que P1 soit mise à jour ?
Il y a au moins trois façons de faire ça :
- passer la propriété DataSourceUpdateMode du binding à DataSourceUpdateMode.OnPropertyChanged.
- récupérer le Binding et de là récupérer la classe C et la propriété P1 puis par Reflection affecter la valeur de P1
- enfin, la solution que j’ai retenue, utiliser la méthode WriteValue sur le Binding :
textBox1.Text = "toto";
if (textBox1.DataBindings["Text"] != null)
textBox1.DataBindings["Text"].WriteValue();