IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Data binding - Comment inverser le sens de circulation du binding.


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Data binding - Comment inverser le sens de circulation du binding.
    Bonsoir à tous,

    J'ai compris pour le binding de mes textbox qui représentent soit des valeurs d'entrée ou de sortie, il fallait que je règle le mode pour indiquer dans quel sens l'info se propage.

    He ba franchement faut avoir sacré niveau avant que la doc soit accessible!

    http://msdn.microsoft.com/fr-fr/libr...ding.mode.aspx

    avec le super exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TextBlock Name="IncomeText" Grid.Row="0" Grid.Column="1"
      Text="{Binding Path=TotalIncome, Mode=OneTime}"/>
    C'est quoi ce truc? je ne suis pas sur le section .net?

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    C'est du WPF (ou Silverlight).
    Tous les contrôles de l'assembly PresentationFramework sont du WPF, et tous ceux de System.Windows.Forms sont du Winform

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Ba en fait ma question, c'est comment on code le binding mode?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Bonjour,

    Alors pour avoir une liaison dans les deux sens tu fais mode=twoWay
    Ensuite pour le reste fait des recherches sur le design pattern MVVM (Model View ViewModel).
    Pour voir comment dev les classes en arrière plans.
    Pour plus de questions je reste a t'a disposition.

    Ps: Il y a des petites diff entre le mvvm pour .net et pour silverlight

    Bonne journée

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par jouana Voir le message
    Bonjour,

    Alors pour avoir une liaison dans les deux sens tu fais mode=twoWay
    Ensuite pour le reste fait des recherches sur le design pattern MVVM (Model View ViewModel).
    Pour voir comment dev les classes en arrière plans.
    Pour plus de questions je reste a t'a disposition.

    Ps: Il y a des petites diff entre le mvvm pour .net et pour silverlight

    Bonne journée
    Merci, mais pourrais tu être plus précis.

    Si je crée une nouvelle instance de binding, il n'existe pas de propriété "mode" ou "BindingMode"...
    Je ne comprend rien à cette foutue doc...

    j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TotalMass_tbox.DataBindings.Clear()
            TotalMass_tbox.DataBindings.Add(New Binding("Text", Chassis, "TotalMass", True, DataSourceUpdateMode.OnValidation, 0))
    Et pour l'instant cela efface la valeur entrée dans la textbox et affiche 0.

    Chassis étant une instance de la classe où se trouve la propriété "TotalMass", je suppose que la propriété n'a pas de valeur au moment où elle est lu et renvoi donc 0 comme si elle était une valeur de sortie...

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par jouana Voir le message
    Bonjour,

    Alors pour avoir une liaison dans les deux sens tu fais mode=twoWay
    Ensuite pour le reste fait des recherches sur le design pattern MVVM (Model View ViewModel).
    Pour voir comment dev les classes en arrière plans.
    Pour plus de questions je reste a t'a disposition.

    Ps: Il y a des petites diff entre le mvvm pour .net et pour silverlight

    Bonne journée
    Valable uniquement WPF et Silverlight. Ici, on parle de Winform

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    La doc, syntax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Property Mode As BindingMode
    	Get
    	Set
    çà veux dire quoi çà?
    Si je colle çà la classe BindingMode est inconnue...

    J'essaie
    Imports System.Windows.Data

    Ceci non plus n'est pas reconnu et donc n'apporte rien.

    Dois je crée cette classe? Que dois je y mettre?

    Suis-je trop stupide pour utiliser la doc?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ce que tu veux pas comprendre c'est que ce que tu envisages d'utiliser n'est possible qu'en WPF et Silvelright alors que toi t'es sous Windows Forms.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Ce que tu veux pas comprendre c'est que ce que tu envisages d'utiliser n'est possible qu'en WPF et Silvelright alors que toi t'es sous Windows Forms.
    çà veux dire qu'en WinForm le binding ne peut se faire que dans un sens?

  10. #10
    Invité
    Invité(e)
    Par défaut
    En Windows Forms ça se fait aussi dans les deux sens mais tu es obligé d'appeler la méthode Refresh de ton binding pour que l'interface soit raffraichit alors qu'en WPF/Silverlight cela se fait automatiquement si on est en mode TwoWay.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Dim binding As New Binding("Text", Chassis, "TotalMass", True, DataSourceUpdateMode.OnValidation, 0)
            Call Refresh(binding)
     
            TotalMass_tbox.DataBindings.Add(binding)
    Comprend pas...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Si tu faisais juste un petit tour par cela ne te fera aucun mal.

  13. #13
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    En Windows Forms ça se fait aussi dans les deux sens mais tu es obligé d'appeler la méthode Refresh de ton binding pour que l'interface soit raffraichit alors qu'en WPF/Silverlight cela se fait automatiquement si on est en mode TwoWay.
    T'es sur de ton coup la? Normalement avec INotifyPropertyChanged sur l'entité ca devrait fonctionner (même en Winform).

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Normalement avec INotifyPropertyChanged sur l'entité ca devrait fonctionner (même en Winform).
    C'est pas pour du two way çà? je ne veux pas un truc qui change de sens alternativement.

    Je veux aller du Textbox vers la propriété.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    T'es sur de ton coup la? Normalement avec INotifyPropertyChanged sur l'entité ca devrait fonctionner (même en Winform).
    Haha ! J'ai hésité de mettre ça mais vu que tu confirmes.

  16. #16
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Pour moi, le code là fonctionne très bien (c'est du C#):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    	public partial class Form1 : Form
    	{
    		private Person _myPerson;
     
    		public Form1()
    		{
    			InitializeComponent();
     
    			_myPerson = new Person
    							{
    								Name = "Toto"
    							};
     
    			myTextBox.DataBindings.Add("Text", _myPerson, "Name");
    		}
     
     
     
    		private void button1_Click(object sender, EventArgs e)
    		{
    			_myPerson.Name = "Titi";
    		}
    	}
     
    	public class Person : INotifyPropertyChanged
    	{
    		private string _name;
     
    		public String Name
    		{
    			get
    			{
    				Trace.WriteLine("Getter invoked");
    				return _name;
    			}
    			set
    			{
    				Trace.WriteLine("Setter invoked");
    				_name = value;
    				RaisePropertyChanged("Name");
    			}
    		}
     
    		#region Implementation of INotifyPropertyChanged
     
    		public event PropertyChangedEventHandler PropertyChanged;
     
    		private void RaisePropertyChanged(string propertyName)
    		{
    			if (PropertyChanged != null)
    				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    		}
     
    		#endregion
    	}
    Attention, le binding (le moment ou la valeur du textbox est propagé à la propriété) se fait toujours à la perte de focus

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    J'ai enfin trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            TotalMass_tbox.DataBindings.Clear()
     
            Dim binding As New Binding("Text", Chassis, "TotalMass", True, DataSourceUpdateMode.OnValidation, 0)
     
            binding.ControlUpdateMode = ControlUpdateMode.Never
     
     
            TotalMass_tbox.DataBindings.Add(binding)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Data binding - Comment inverser le sens de circulation du binding.
    Par Gualino dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/09/2011, 19h28
  2. [Système/Fichiers/API] XML data binding, comment savoir quel élément de type "choice" est présent ?
    Par Pascale38 dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/05/2011, 09h18
  3. [C#] Comment inverser une chaine de caractères ?
    Par just1980 dans le forum Contribuez
    Réponses: 6
    Dernier message: 01/05/2011, 20h35
  4. Comment inverser une matrice H(2,2) ?
    Par fafa624 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 10h23
  5. Association : comment choisir le sens ?
    Par 1cado dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 26/09/2004, 23h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo