WPF zone de texte pour entrer les valeurs décimales
Est-il de toute façon décente à obtenir un contrôle WPF qui est liée à une valeur décimale?
Quand je viens de lier la zone de texte ou DataGridTextColumn à une décimale, la saisie de données suce le gros temps.
<TextBox Text="{Binding MyDecimal, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
Lorsque j'essaie d'entrer "0,5" dans cette zone de texte, je vais devenir "5" comme résultat. Il est presque impossible d'entrer dans la "0,5" à tous (à l'Exception de la saisie de 1,5 et de remplacer le "1" par "0").
Lorsque j'utilise StringFormat d'entrée de données suce toujours un petit temps:
<TextBox Text="{Binding MyDecimal, StringFormat=F1, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>
Maintenant, quand j'essaie de le saisir "0,5" je vais terminer avec "0,5,0", qui est toujours mauvais, mais au moins je peux supprimer la fin ",0" sans trop de Problèmes.
Encore, en entrant décimales en utilisant WPF suce le gros temps, car ce champs de saisie sont très sujettes à des erreurs de saisie de données, qui est une vraie douleur en particulier pour les valeurs!
Que suis-je censé utiliser pour les décimales saisie de données dans wpf? Ou est-ce que Microsoft supporte pas de données décimal??
OriginalL'auteur Sam | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Actuellement, je utiliser ce comportement pour le numérique et décimale d'entrée:
Le code XAML de l'utilisation ressemble à ceci:
pourquoi downvote sans commentaire. cela n'a aucun sens
J'ai vu un comportement étrange (il permet à n'importe quel caractère) quand vous mettez un signe premier, autrement, c'est une solution sympa! Je vais essayer de trouver le bug dans votre code, mais je pense qu'il pourrait prendre un certain temps, puisqu'elle est un peu grande. Merci pour votre solution.
merci pour votre commentaire. j'ai corrigé le "moins" problème 🙂
Pour obtenir
Behavior<TextBox>
ajouter une référence > extensions > Système.De Windows.L'interactivitéOriginalL'auteur blindmeis
La WPF Étendu toolkit a un DecimalUpDown de contrôle qui peuvent répondre à vos besoins. Il est libre d'utiliser, et il est préférable d'utiliser ce que d'essayer de le rouler votre propre.
Que pour la validation de l'entrée, il y a un certain nombre de façons de l'application de la validation, voici un détaillée dans MSDN. Je détail d'une autre approche personnalisé peut être liée validation en deux messages sur mon blog (vous appliquez la validation de la
Value
propriété de liaison sur la DecimalUpDown de contrôle).OriginalL'auteur slugster
Cela fonctionnera également comme une alternative. Depuis un nombre décimal doit accueillir le caractère".", il est testé pour. Une seule instance est autorisée. Beaucoup moins de code.
OriginalL'auteur CMarsden
J'ai aussi rencontré ce problème; avec
UpdateSourceTrigger=PropertyChanged
il semble que la liaison tente de mettre à jour le texte que vous tapez. Pour résoudre ce problème, nous avons changé notre champs d'entrée de sorte queUpdateSourceTrigger=LostFocus
, par exemple:Vous pouvez définir vos propres erreurs de validation à l'aide de la
IDataErrorInfo
interface. Vous avez juste besoin d'ajouter les éléments suivants à votre soutien modèle:oui, mais c'est en essayant de répondre à une question, je veux qu'il soit évident que ce qui se passe.
Problème: le UpdateSourceTrigger a été fixée pour une raison, parce que sinon, la liaison de la valeur pourrait ne pas être mis à jour lorsque l'utilisateur appelle un bouton à l'aide d'un raccourci clavier.
ah, dans ce cas, c'est probablement ne va pas aider. Je vais le laisser en place, mais parce que dans le cas où vous n'avez pas besoin PropertyChanged, c'est une solution simple, de l'OMI.
OriginalL'auteur testpattern
J'ai mis en place mon propre zone de texte. Il met à jour la source, quand il y a un certain nombre dans le texte, pas autrement. Sur le foyer perdu, j'ai lu la propriété source. Tout ce que vous avez à faire est de remplacer la zone de texte avec cette classe, et de lier le "Nombre" de la Propriété, qui est de type double.
OriginalL'auteur pinki
Cela vous permet de décimales après être entré dans la zone de texte et rien d'autre.
Le viewmodel ressemble à ceci:
Le code XAML de l'utilisation ressemble à ceci:
OriginalL'auteur ian korkie
Im nouveau, donc je ne peux pas commenter sa réponse, mais je fixe le nombre négatif questions blindmeisle code.
Juste modifier le
section de IsValidInput ()...
OriginalL'auteur cheebacat
si vous souhaitez que la zone de texte pour autoriser uniquement la virgule puis écrire previewinputtext événement pour que la zone de texte.
alors dans ce cas d'écrire ce code
OriginalL'auteur Hari prasad kasavajjala
Cette regex fonctionne
OriginalL'auteur Kavinda Gehan