Databinding entre deux controls

azrzh - 26 févr. 2020 à 16:34
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 27 févr. 2020 à 18:41
Bonjour,

J'aimerais que quand on clique sur le bouton enregistrement dans le panel bleu, que l'autre bouton enregistré soit exécuté. En sachant que ce bouton que je souhaite relier est dans un usercontrol situé dans un panel affiché avec un tableLayoutPanel. Et l'autre bouton enregistrement dans le panel bleu se situe dans une form qui est le main.

Du coup dans le main, il y a:

-bindingSourceMain relié au fichier main du projet

-bouton "enregistrement"(panel bleu) relié aux bindingSourceMain

Dans le fichier Alimentation il y a:

-bindingSourceAlim relié à mainBindingSource

-mainBindingSourcerelié au fichier main du projet

-bouton "enregister" relié à mainBindingSource

Et je ne sais pas quoi faire ensuite, car j'ai relié que les propriété autoscroll (car de ce que j'ai compris, on s'en fiche de quelle propriété liée)

Merci de vos retours !

4 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 févr. 2020 à 17:51
Bonjour

peux tu montrer comment sont faites ces liaisons?
1
Bonjour,

je les ai faites avec le concepteur de visual studio et elles sont toutes reliés sur la propriété autoscroll.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
27 févr. 2020 à 09:02
Comment as tu relié un bouton sur une propriété ?

En WPF via une ICommand ok, mais un bindingSource c’est en winform.
1
oui le fichier main est un winform et l'autre fichier alimentation est un usercontrol

Du coup y a deux buttons que je veux relier, l'un dans le main connecter a bindingSourceMain et l'autre dans le fichier alimentation connecter a mainBindingSource
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
27 févr. 2020 à 12:09
Un bouton traite une action quand on clique dessus.
A ma connaissance on ne peut pas binder une action en winform.


1
Du coup comment faire pour lier ces deux actions qui ce situe dans un fichier différent ?
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié le 27 févr. 2020 à 18:34
Bon, j'ai pas réussi exactement ce que tu veux (enfin je crois).

Je te propose ceci, d'abord la classe métier Truc
    public class Truc
    {
        private static int compteur = 0;

        private int numero;
        public Truc()
        {
            numero = ++compteur;
        }

        public void Action()
        {
            MessageBox.Show(string.Format("{0} sur {1}", numero, compteur));
        }

        public override string ToString()
        {
            return string.Format("Truc numéro {0}", numero);
        }
    }


Ensuite un contrôle Machin, avec un bouton et un label
    public partial class Machin : UserControl, INotifyPropertyChanged  
    {
        public Machin()
        {
            InitializeComponent();
        }

        private Truc truc;

        public Truc LeTruc
        {
            get { return truc; }
            set
            {
                if (truc == value)
                    return;

                truc = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LeTruc"));

                label1.Text = truc.ToString();
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        private void button1_Click(object sender, EventArgs e)
        {
            LeTruc.Action();
        }
    }

J'ai pas su binder sur la propriéte LeTruc du contrôle, et donc j'ai fait comme ça
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<Truc> trucs;
        private void Form1_Load(object sender, EventArgs e)
        {
            trucs = Enumerable.Range(0, 10).Select(x => new Truc()).ToList();
            trucBindingSource.DataSource = trucs;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ((Truc)trucBindingSource.Current).Action();
        }

        private void trucBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            machin1.LeTruc = (Truc)trucBindingSource.Current;
        }
    }


Le projet complet https://www.cjoint.com/c/JBBrGG1CbP5

0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
27 févr. 2020 à 18:35
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
Modifié le 27 févr. 2020 à 18:41
Par contre en WPF, c'est possible
0
Rejoignez-nous