septembre
2008
Le binding bidirectionnel consiste à « associer » une propriété de classe à un controle de Formulaire.
Par exemple, j’ai un textbox sur ma form qui est associé à une chaine (String) dans ma classe. Toute modification de ce textbox entraine automatiquement une modification de ma chaine. Inversement, toute modification de cette chaine en code, implique une répercution visuelle sur la valeur du textbox.
Voici comment implémenter un tel binding :
Le principe est d’utiliser l’interface INotifyPropertyChanged. L’appel de l’événement PropertyChanged permet d’informer que la valeur a changé et automatiquement répercuter ce changement.
Voici comment faire en C++/CLI (plus loin, la version C#) :
Tout d’abord, la form doit implémenter INotifyPropertyChanged
public ref class Form1 : public System::Windows::Forms::Form, INotifyPropertyChanged
Ceci implique de définir l’événement suivant :
virtual event PropertyChangedEventHandler ^PropertyChanged;
Il nous faut ensuite une propriété de type String. C’est cette propriété qui sera bindée à notre TextBox :
String ^_chaine;
public:
property String ^Chaine
{
String ^ get() { return _chaine; }
void set(String ^value)
{
if (value != _chaine)
{
_chaine = value;
NotifyPropertyChanged("Chaine");
}
}
}
On note l’appel à la méthode NotifyPropertyChanged pour indiquer une changement de valeur.
void NotifyPropertyChanged(String ^info)
{
PropertyChanged(this, gcnew PropertyChangedEventArgs(info));
}
La méthode NotifyPropertyChanged appelle l’événement PropertyChanged pour signaler le changement afin qu’il soit répercuté à tous les endroits où le binding est effectué.
Ne pas oublier de définir le binding, au plus tot, dans le form_load par exemple :
textBox1->DataBindings->Add("Text", this, "Chaine");
Et le tour est joué.
Voici la syntaxe pour du C# :
public partial class Form1 : Form, INotifyPropertyChanged
public string Chaine
{
get { return _chaine; }
set
{
if (value != _chaine)
{
_chaine = value;
NotifyPropertyChanged("Chaine");
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.DataBindings.Add("Text", this, "Chaine");
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007