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 Presentation Foundation Discussion :

Binding sur une variable static


Sujet :

Windows Presentation Foundation

  1. #1
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut Binding sur une variable static
    bonjour,

    j'ai une classe test static avec une variable static, elle est de type booleenne. Comment puis je faire pour pour binder une checkbox à cette variable ?

    Merci

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    J'ai envie de dire comme un Binding normal soit un truc comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          Binding bd = new Binding();
          bd.Source = maClassStatic.monChampStatic;
          maCheckBox.SetBinding(CheckBox.IsCheckedProperty, bd);

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      static public class maClassStatic {
        static public bool monChampStatic { get; set; }
      }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <CheckBox IsChecked="{Binding Source={x:Static leNamespace:laClasse.leChamp}}">...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    pour info frédéric hamel propose un memo sur le binding (Google > Data Binding Quick Reference)

  5. #5
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    genial ce memo merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Attention, avec ce qui est indiqué dans le mémo, tu ne fais pas de binding... tu récupères la valeur au moment de l'initialisation du contrôle, mais si elle change par la suite, le contrôle ne se mettra pas à jour

  7. #7
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <CheckBox IsChecked="{Binding Source={x:Static leNamespace:laClasse.leChamp}}">...
    je suis d'accord mais il faut que ma propriete static se mette à jour quand je coche ou décoche la checkbox. Et la le fait d'affecter que la source ne le fait pas.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par chris81 Voir le message
    je suis d'accord mais il faut que ma propriete static se mette à jour quand je coche ou décoche la checkbox. Et la le fait d'affecter que la source ne le fait pas.
    ah oui, c'est vrai...

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    evidement donc la solution c'est de mettre un constructeur prive a la classe
    de coller un static dedans style
    static readonly maclass default = new maclasse();
    et de faire le binding sur le static default qui permet d'atteindre la classe construite

    a l'ancienne quoi !!!!

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par ikeas Voir le message
    evidement donc la solution c'est de mettre un constructeur prive a la classe
    de coller un static dedans style
    static readonly maclass default = new maclasse();
    et de faire le binding sur le static default qui permet d'atteindre la classe construite

    a l'ancienne quoi !!!!
    oui, mais dans ce cas la classe devient un singleton, ce n'est pas forcément souhaitable...

  11. #11
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    tout a fait la classe serait un singleton et dans ce cas je n'ai pas d'utilite.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    c'est vrai ceci etant quand tu creuse un peut .net 3.5 tu vois qu'il ont bcp utilise le principe pour cela
    j'ai tenté de faire le test avec un membre static manifestement ca doit devnir du INotifyPropertyChanged qu'on peut pas mettre en static (ben normal quoi)

  13. #13
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    bon ben merci d'avoir chercher avec moi, je vais chercher une autre solution.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Je déterre ce message pour savoir si quelqu'un aurait trouver quelque chose depuis.

    J'ai un problème similaire :
    Je veux binder la propriété IsChecked d'un MenuItem sur une propriété statique, avec un mode TwoWay.

    Betement, j'écris ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsCheckable="True" IsChecked="{Binding Source={x:Static local:MaClasse.MaPropriete}}"/>
    Mais à l'éxecution, il me sort une exception :
    La valeur 'System.Windows.Data.Binding' ne peut pas être attribuée à la propriété 'IsChecked' de l'objet 'System.Windows.Controls.MenuItem'. La liaison bidirectionnelle nécessite Path ou XPath.

    Est ce qu'il y a une autre solution que de passer par un singleton ?

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je crois qu'une fois j'avais eu à faire ça, et j'avais trouvé une solution un peu crade, mais qui marchait : mettre comme source du binding une instance bidon de la classe, et l'utiliser comme source du binding :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Window.Resources>
        <local:MaClasse x:Key="maClasse" />
    </Window.Resources>
     
    ...
     
    <MenuItem IsChecked="{Binding Path=MaPropriete, Source={StaticResource maClasse}}"
    ...

  16. #16
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Je suis preneur ! Effectivement, j'aurai espéré mieux...

    mais à choisir entre coder la synchro à la main ou utiliser le binding avec une instance bidon, la flemme..euh non... ma volonté d'avoir un code épuré me pousse à choisir la seconde solution!

Discussions similaires

  1. [Débutant] binding sur une variable définie dans un .cs
    Par Rakken dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 01/10/2012, 10h38
  2. Réponses: 2
    Dernier message: 26/10/2011, 16h55
  3. Binding d'une variable déclaré en C# sur un Control
    Par Takumi dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 25/01/2010, 23h19
  4. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  5. binding sur une propriété shared (vb) static (c#) ?
    Par Pol63 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/06/2009, 15h44

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