Aide sur le DataBinding [Résolu]

Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
- 16 déc. 2010 à 12:14
Bonjour à tous,

Une fois de plus je reviens vers vous.
J'ai déjà utilisé le DataBindings (de manière simple) avant et cela fonctionnait mais la je doit passer à côté d'un truc important.

Voilà. (merci d'avance aux courageux qui liront tout).

J'ai un classe source implémentant INotifyPropertyChanged :

    public class MaSource: INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        private string _nombre;
        public string Nombre
        {
            get { return _nombre; }
            set
            {
                if (_nombre != value)
                {
                    _nombre = value;
                    OnPropertyChanged("Nombre");
                }
            }
        }

        public MaSource(string nombre)
        {
            _nombre = nombre;
        }
    }


Ensuite j'ai une autre classe héritant de Control et implémentant aussi INotifyPropertyChanged. Je fais hérité de Control pour pouvoir "aisément" avoir la collection DataBindings. (je sais c'est vilain mais bon...)

   public class AutreClasse : Control, INotifyPropertyChanged
    {

        private string  _test;

        public string TEST
        {
            get { return _test; }
            set
            {
                if (_test != value)
                {
                    _test = value;
                    OnPropertyChanged("TEST");
                }
            }
        }


        public AutreClasse()
        {
            this.Visible = true;
        }


        #region INotifyPropertyChanged Membres

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }



Ensuite j'ai un formulaire avec un textbox et une list<MaSource>

        public partial class Form1 : Form
    {
        private MaSource _source = new MaSource("Valeur");
        private AutreClasse _obj = new AutreClasse();
        public Form1()
        {

            InitializeComponent();
            
            textBox1.DataBindings.Add("Text", _source, "Nombre", false, DataSourceUpdateMode.OnPropertyChanged);
            _obj.DataBindings.Add("TEST", _source, "Nombre", true, DataSourceUpdateMode.OnPropertyChanged);
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }
    }


Voilà donc mon problème. Je souhaiterait Binder la propriété Nombre d'un objet MaSource vers la propriété TEST d'un objet AutreClasse... Je n'y arrive.
Le binding avec le textbox fonctionne mais pas celui avec AutreClasse.
Ma question est donc existe t'il un moyen "simple" d'arriver à mes fins?
Je pensais ne poserais pas de problème mais j'ai du me tromper.

Je voudrais éviter d'avoir à écrire des classes trop "compliquées"

J'ai beau chercher sur le net mais à part Base de données et DataGridView, y a pas grand chose comme exemple pour le DataBinding.

D'ailleurs si certains avaient des liens intéressants je suis preneur aussi.

Un grand merci pour m'avoir lu jusqu'au bout et un grand merci à ceux qui pourront me donner un coup de main.

@+: Ju£i€n
Pensez: Réponse acceptée
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
45
3
Merci
Salut,
Merci d'avoir pris le temps de me lire.

Si je suis ce que tu dis, je ne fais pas de Databinding. L'un des avantages du DataBinding c'est justement de ne pas avoir à écrire le code de mise à jour et les abonnements aux porpertyChanged.

Je crois en fait avoir ENFIN trouver la réponse à ma question ce matin.
Il "suffisait" d'ajouter l'objet héritant de control (AutreClasse), à la collection de control du formulaire.

Et une fois ceci fait VOILA! ca fonctionne.


Merci tout de même à MasterShadows d'avoir lu.


@+: Ju£i€n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 213 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
269
Date d'inscription
lundi 1 mars 2004
Statut
Membre
Dernière intervention
19 avril 2012
10
0
Merci
Salut, tu hérite AutreClasse et MaSource de INotifyPropertyChanged.

Lorsque tu instancies tes classes, tu dois enregistrer cet évènement.

AutreClasse ac=new AutreClasse();
ac.PropertyChanged+=AutreClasseOnPropertyChanged;

MaSource source = new MaSource();
source.PropertyChanged+=SourceOnPropertyChanged;

Ensuite dans les méthodes créées, à toi de faire les renvoies comme il faut ...
Commenter la réponse de MasterShadows