Aide sur le DataBinding

Résolu
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 14 déc. 2010 à 12:21
jrivet Messages postés 7392 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

2 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
16 déc. 2010 à 12:14
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
3
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
15 déc. 2010 à 13:06
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 ...
0
Rejoignez-nous