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 :

[WPF] passer une référence dans un CommandParameter


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Points : 65
    Points
    65
    Par défaut [WPF] passer une référence dans un CommandParameter
    Bonjour à tous,

    Je voudrais passer une référence dans un CommandParameter affin de pouvoir la modifier dans l'exécution de la commande

    ma vue :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <TextBox FontSize="20" Width="50" Margin="1 5" Text="{Binding NewLinePosition}" Name="_tbx_newLinePos"/>
                <Button Margin="1 5" Command="{Binding SetValueFromCursor}" CommandParameter="{Binding NewLinePosition}" 
                        Height="40" Width="20" Padding="3" ToolTip="Prendre la position du curseur">
                    <Line Stroke="Orange" StrokeThickness="8" X1="0" X2="0" Y1="0" Y2="40" />
                </Button>

    mon code behind :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            /// <summary>
            /// Définit tout les combien de caractère il faut insérer un retour chariot
            /// </summary>
            public int NewLinePosition
            {
                get { return _newLinePosition; }
                set { _newLinePosition = value; NotifyPropertyChanged("NewLinePosition"); }
            }
     
            /// <summary>
            /// Définit une valeur depuis la valeur du curseur
            /// </summary>
            public RelayCommand<object> SetValueFromCursor
            {
                get
                {
                    if (_setValueFromCursor == null) _setValueFromCursor = new RelayCommand<object>(p => setValueFromCursor(ref p));
                    return _setValueFromCursor;
                }
            }
     
            /// <summary>
            /// Définit une valeur depuis la valeur du curseur
            /// </summary>
            /// <param name="value"></param>
            private void setValueFromCursor(ref object value)
            {
                if (value == null) return;
                value = CursorValue;
            }

    Ceci ne fonctionne pas et la valeur de ma textbox n'est donc pas mis à jour :/

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Etant donné que ta propriété "NewLinePosition" fait partie du même objet que celui qui a le "RelayCommand", alors je ne vois pas du tout l'intérêt de le passer en paramètre du relaycommand... D'après ce que tu nous montres, il me semble que ce n'est pas du tout nécessaire.

    Du coup, tu n'as juste qu'à accéder directement à NewLinePosition à partir de ton code behind :

    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
     
            /// <summary>
            /// Définit une valeur depuis la valeur du curseur
            /// </summary>
            public RelayCommand<object> SetValueFromCursor
            {
                get
                {
                    if (_setValueFromCursor == null) _setValueFromCursor = new RelayCommand<object>(p => setValueFromCursor(p));
                    return _setValueFromCursor;
                }
            }
     
            /// <summary>
            /// Définit une valeur depuis la valeur du curseur
            /// </summary>
            /// <param name="value"></param>
            private void setValueFromCursor(object value)
            {
                //value n'a pas d'importante ici...
                NewLinePosition = CursorValue;
            }
    Dernière modification par Invité ; 03/12/2014 à 18h01.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Points : 65
    Points
    65
    Par défaut
    En effet tu as raison je peux tout à fait y accéder depuis la fonction setValueFromCursor

    Cependant l’intérêt de ce que je veux faire est de pouvoir utiliser la commande SetValueFromCursor sur plusieurs boutons de ma vue et que chacun change une propriété différente.

    J'ai contourné le problème en faisant ça :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <TextBox FontSize="16" Width="40" ToolTip="position" Name="_tbx_pos" 
                                             Text="{Binding ParameterPosition, Mode=TwoWay}" TextChanged="_tbx_pos_TextChanged"/>
     <Button Margin="1 0" Height="30" Width="20" Padding="3" ToolTip="Prendre la position du curseur"
                                            Command="{Binding DataContext.SetValueFromCursor, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}" 
                                            CommandParameter="{Binding ElementName=_tbx_pos, Path=.}" >

    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
     
            /// <summary>
            /// Définit une valeur depuis la valeur du curseur
            /// </summary>
            /// <param name="value"></param>
            private void setValueFromCursor(ref object value)
            {
                if (value == null) return;
                if (value is TextBox)
                {
                    ((TextBox)value).Text = CursorValue.ToString();
                    return;
                }
                value = CursorValue;
            }
    Mais je n'aime pas trop cette façon de faire...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Effectivement, dans ce cas...

    Est-ce que tu sais par contre qu'avec cette nouvelle façon de faire tu n'as plus besoin alors de mettre "ref" devant "object value"? Essaye si tu ne me crois pas.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 105
    Points : 65
    Points
    65
    Par défaut
    Oui mais je le laisse pour ne pas oublier ce que je voulais faire à la base^^

Discussions similaires

  1. Passer une référence à une classe dans un constructeur
    Par alefriedx dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/02/2011, 22h07
  2. [1.1] passer une référence dans un thread
    Par melleb dans le forum C#
    Réponses: 4
    Dernier message: 26/05/2008, 11h17
  3. Ajouter une référence dans un runtime
    Par rogger dans le forum Runtime
    Réponses: 13
    Dernier message: 07/12/2005, 17h20
  4. Réponses: 10
    Dernier message: 24/09/2005, 19h19
  5. [Struts] Passer une variable dans l'url
    Par pilz dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/03/2005, 15h23

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