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 :

[C#] WPF, Style, Trigger, Binding


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 30
    Points
    30
    Par défaut [C#] WPF, Style, Trigger, Binding
    Bonjour,

    Voila mon problème :

    J'applique un style aux cellules d'une grid contenant des données issues de bind sur des EntityObject. Ce style consiste à appliquer une couleur différente grâce à un trigger bindé sur une DependencyProperty du Control contenant la grille. L'objet de binding contient également un converter traduisant la propriété bindé (un numéro de ligne dans ma grille) en un bouléen précisant si la ligne est à colorer ou non.

    Ma question est donc : est-il possible de passer en paramètre du converter ou de récupérer dans celui-ci la ligne ou la cellule courante sur laquelle le style est en train de s'appliquer?

    Merci,

    Greg

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 97
    Points : 106
    Points
    106
    Par défaut
    Salut,
    Tu devrais poster ton style et ton converter car là c'est pas clair.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 30
    Points
    30
    Par défaut
    Oui bien sur. Voici les morceaux choisis du code incriminé

    Premièrement, le Style :
    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
     
    style = new Style()
                {
                    TargetType = typeof(CellContentPresenter)
                };
     
                // TODO : Trouver comment cibler les erreurs sur une même ligne et colone
                #region Trigger Modified
     
                var bindingRowHandleConverter = new Binding()
                {
                    Path = new PropertyPath(MaClasseContenantLaGrid.RowHandleInErrorProperty),
                    Source = this,
                    Converter = errorConverter,
                    ConverterParameter = this.gc.GetFocusedRow() == inError
                };
     
                // HYPOTHESE : UTILISER LE MULTIBINDING
     
                //var temp = new MultiBinding();
                //temp.Bindings.Add(bindingRowHandleConverter);
     
     
                conditionErreur = new Condition(bindingRowHandleConverter, true);
                var conditionNonErreur = new Condition(bindingRowHandleConverter, false);
     
     
                //Le trigger permet de specifier qu'on applique ce style au ligne pour lequel l'etat de l'entityobject est Modified
                triggerModifiedSansErreur = new MultiDataTrigger();
                triggerModifiedSansErreur.Conditions.Add(new Condition(new Binding("DataContext.EntityState"), System.Data.EntityState.Modified));
                triggerModifiedSansErreur.Conditions.Add(conditionNonErreur);
     
                var triggerModifiedAvecErreur = new MultiDataTrigger();
                triggerModifiedAvecErreur.Conditions.Add(new Condition(new Binding("DataContext.EntityState"), System.Data.EntityState.Modified));
                triggerModifiedAvecErreur.Conditions.Add(conditionErreur);
     
                var setterModifiedSansErreur = new Setter()
                {
                    Property = Border.BackgroundProperty,
                    Value = Brushes.AliceBlue
                };
     
     
                var setterAvecErreur = new Setter()
                {
                    Property = Border.BackgroundProperty,
                    Value = Brushes.Salmon
                };
    Deuxièmement le converter :

    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
     
    public class ErrorConverter : IValueConverter
        {
     
     
            public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
     
                return value==parameter;
            }
     
            public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return null;
            }
     
        }
    le but étant que parameter vaille la valeur courante (la cellule à laquelle s'applique le style à l'instant t)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 42
    Points : 30
    Points
    30
    Par défaut
    Et voila!!

    Comme d'habitude il faut que ce soit au moment ou je demande de l'aide que je trouve la réponse tout seul ....

    4 jours de recherche tout de même à lire la doc et à faire des essais infructueux. Au moins maintenant je sais ce que c'est qu'une DependencyProperty et comment marche le binding et les trigger en WPF !!!

    La réponse était le multiBiding.

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

Discussions similaires

  1. [WPF] Styles et triggers
    Par zenico64 dans le forum C#
    Réponses: 4
    Dernier message: 25/03/2014, 20h27
  2. [WPF] Faire un Binding du fichier Ressource
    Par UNi[FR] dans le forum C#
    Réponses: 13
    Dernier message: 29/09/2009, 22h37
  3. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51
  4. [WPF][triggers] binding sur un DataView?
    Par bakonu dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 26/10/2007, 09h25
  5. [WPF]Perte de binding !
    Par GroXx dans le forum C#
    Réponses: 5
    Dernier message: 29/09/2007, 22h59

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