Meilleur auteur de réponses
Vider la valeur d'une TextBox - Mode TwoWay

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
Réponses
-
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- Marqué comme réponse Gilles TOURREAUModerator dimanche 30 mai 2010 08:15
-
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
- Marqué comme réponse Gilles TOURREAUModerator dimanche 30 mai 2010 08:15
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 -
-
Bonjour,
Dans votre code saisissez :
this.nameTextBox.Text = string.Empty;
Cordialement
Gilles TOURREAU - MVP C# - MCP - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr -
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
-
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- Marqué comme réponse Gilles TOURREAUModerator dimanche 30 mai 2010 08:15
-
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 attributstring 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.
-
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
- Marqué comme réponse Gilles TOURREAUModerator dimanche 30 mai 2010 08:15
-