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

C# Discussion :

binding de la propriete Visibility à une variable static


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Par défaut binding de la propriete Visibility à une variable static
    Bonjour,

    j'ai un problème depuis quelques jours maintenant, et je ne trouve toujours pas mon erreur, sachant que je n'ai utilisé que du binding simple sur le datacontext jusqu’à présent.
    Donc j'ai:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <Window x:Class="monAppli.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:my="clr-namespace:monAppli"
            Title="monAppli" Height="768" Width="1366" WindowStyle="None"  Top="0" Left="0" ResizeMode="NoResize" WindowState="Maximized">
     
      <Grid Name="Grid" >
     
         <my:ucCarousel Visibility="{Binding Source={x:Static Member=my:Global.carouselVisibility}, UpdateSourceTrigger=PropertyChanged}"/>
     
      </Grid>
     
    </Window>

    et:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    namespace monAppli
    {    
        public class Global
        {    
            #region Parametres
     
            public static System.Windows.Visibility carouselVisibility;// = System.Windows.Visibility.Visible;
            #endregion
        }
    }

    et je modifie ma valeur carouselVisibility avec 2 radiobutton dans un même group
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private void radioButton12_Checked(object sender, RoutedEventArgs e)
            {
                if (radioButton12.IsChecked == true)
                {
                    Global.carouselVisibility = System.Windows.Visibility.Visible;
                 }
            } 
    private void radioButton13_Checked(object sender, RoutedEventArgs e)
            {
                if (radioButton13.IsChecked == true)
                {
                    Global.carouselVisibility = System.Windows.Visibility.Hidden;
                 }
            }

    Mon carrousel est toujours visible , quelque soit le radioButton que je coche ... quelqu'un peu il m'aider ? je suis sur que c'est quelque-chose de stupide qu'il me manque ... mais je suis bloquer.
    Merci d'avance .

  2. #2
    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 : 43
    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
    Par défaut
    Normalement pour signaler que la valeur d'une propriété a changé, on implémente l'interface INotifyPropertyChanged. Le binding écoute l'évènement PropertyChanged de cette interface et se met à jour quand il est déclenché.

    Le problème c'est que pour un membre statique, tu ne peux pas implémenter d'interface INotifyPropertyChanged... Donc en fait il faudrait que ton objet Global soit un singleton qui implémente l'interface. Au passage, il faut remplacer ton champ carouselVisibility par une propriété, vu que seules les propriétés peuvent déclencher une notification.


    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
        public class Global : INotifyPropertyChanged
        {
            private Global() { }
     
            private static readonly Global _instance = new Global();
            public static Global Instance { get { return _instance; } }
     
            #region Parametres
     
            private System.Windows.Visibility _carouselVisibility;
            public System.Windows.Visibility CarouselVisibility
            {
                get { return _carouselVisibility; }
                set
                {
                    _carouselVisibility = value;
                    OnPropertyChanged("CarouselVisibility");
                }
            }
     
           #endregion
     
           #region INotifyPropertyChanged
     
           public event PropertyChangedEventHandler PropertyChanged;
     
            protected virtual void OnPropertyChanged(string propertyName)
            {
                var handler = PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }
     
           #endregion
        }
    Et dans ton code XAML tu fais le binding comme ça :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    <my:ucCarousel Visibility="{Binding Path=CarouselVisibility, Source={x:Static Member=my:Global.Instance}}"/>

    (le UpdateSourceTrigger ne sert à rien puisque le binding n'est pas TwoWay)

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Par défaut
    Ok, j'ai dû refaire une class paramètre en singleton qui implémente l'INotifyPropertyChanged (class Global trop utilisée déjà :p), mais ça marche super.
    Merci bien.

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

Discussions similaires

  1. Binding sur une variable static
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 30/03/2009, 18h37
  2. comment importer une variable static
    Par Asmod_D dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/03/2007, 14h55
  3. [POO] Problème avec une variable static
    Par grimsk dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2006, 01h58
  4. [VB6]Initialiser une variable Static dans un évenement
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 20/01/2005, 14h57
  5. [héritage] héritage d'une variable static
    Par yaya44 dans le forum Langage
    Réponses: 14
    Dernier message: 29/09/2004, 13h36

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