none
Vider la valeur d'une TextBox - Mode TwoWay RRS feed

  • Question

  • Bonjour, 

     

    J'ai un petit souci avec ma textbox. 

    J'ai bindé ma textbox en mode TwoWay, j'arrive parfaitement à récupérer la valeur que j'entre dans ma textbox. 

    Cependant, j'aimerais maintenant pouvoir initialisé ce champ, soit en le vidant soit en lui attribuant une valeur. 

    Comment faire ? 

     

    Merci par avance

    vendredi 28 mai 2010 20:40

Réponses

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous montrer votre XAML afin de voir comment est bindé votre TextBox ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 28 mai 2010 21:25
    Modérateur
  • Voilà comment j'ai bindé ma textbox.

    <TextBox Height="23" Name="nameTextBox" Width="120" Text="{Binding nameText, Mode=TwoWay}"/>

    Merci.

    samedi 29 mai 2010 06:36
  • Bonjour,

    Dans votre code saisissez :

    this.nameTextBox.Text = string.Empty;

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 29 mai 2010 07:37
    Modérateur
  • En fait nameText est une TextBox en XAML mais une variable de type string dans ma classe. Est-ce que pour que cela fonctionne, ma TextBox doit être bindée sur un objet de type TextBox ?

    Du coup, pour récupérer ma valeur, je fais :

    this.nameText

    Pour le moment, en faisant : 

    this.nameText = string.Empty
    Rien ne change. 

     

     

    Merci 

    samedi 29 mai 2010 08:01
  • Bonjour,

    C'est normal, lors de la modification du champ lié, vous devez notifier WPF (le Binding en particulier) que le champ a changé de valeur. Pour cela utilisez la méthode UpdateTarget() après chaque modification de nameText :

    this.nameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();

    Cordialement


    Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 29 mai 2010 13:08
    Modérateur
  • Je ne comprends pas très ça ne fonctionne pas correctement. 

    Je vous explique un peu mieux mon problème. 

    J'utilise en fait, le modèle MVVM, du coup j'ai : 
        - une classe qui s'appelle "ManageNameViewModel.cs" : ce fichier contient tout mon code. Ce fichier contient toutes mes commandes qui permettent d'intéragir avec mon fichier ManageNameView.xaml. C'est donc dans ce fichier que j'ai un attribut

    string nameText

     

    et c'est aussi dans ce fichier que je récupère la valeur contenu dans la textBox en faisant :

    string maString = this.nameText

    je traite mes maString et c'est à ce moment là que je souhaite pouvoir réinitialiser ma textBox (voir la remplir d'une autre valeur) 

     

        - un fichier XAML nommée "ManageNameView.xaml" : ce fichier contient toute ma structure de mon affichage. Ce fichier contient la ligne de code suivante : 

    <TextBox Height="23" Name="nameTextBox" Width="120" Text="{Binding nameText, Mode=TwoWay}"/>

     

        - un fichier classe partielle nommé "ManageNameView.cs" : ce fichier est vide, il ne contient aucune ligne de code mise à part le constructeur par défaut.

     

    J'espère avoir assez d'informations.

    Merci de votre aide. 

    samedi 29 mai 2010 19:37
  • Bonjour,

    nameText devrait être une propriété. Implémenter également INotifyPropertyChanged pour que la textbox puisse s'abonner aux changements de cette propriété.

    A partir de là, quand nameText sera changé, les abonnés (dont la "vue" XAML) seront automatiquement notifié et pourront se mettre à jour...

    Voir : http://msdn.microsoft.com/fr-fr/library/system.componentmodel.inotifypropertychanged(VS.80).aspx

    samedi 29 mai 2010 21:56
    Modérateur
  • Merci beacoup. 
    dimanche 30 mai 2010 14:55