Laden...

TextBox für Geldbeträge mit Validation Rule akzeptiert Zeichen "," und "." nicht mehr

Erstellt von CWolle vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.442 Views
CWolle Themenstarter:in
57 Beiträge seit 2012
vor 6 Jahren
TextBox für Geldbeträge mit Validation Rule akzeptiert Zeichen "," und "." nicht mehr

ich habe eine TextBox zum Anzeigen und Ändern von Geldbeträgen. Eine falsche Eingabe soll einen roten Rahmen erzeugen. Ich versuchte dies mit einer Validation Rule, aber plötzlich kann ich die Zeichen ',' und '.' nicht mehr in die TextBox eingeben (alle anderen gehen). Was mache ich falsch?

<TextBox Name="basicPreis">
            <Binding Path="Betrag" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <local:BetragValidationRule />
                </Binding.ValidationRules>
            </Binding>
        </TextBox>

Die ValidationRule lautet:

public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            string wert = value as string;
            try
            {
                double val = Convert.ToDouble(wert);
                return ValidationResult.ValidResult;
            }
            catch
            {
                return new ValidationResult(false, "Keine Zahl");
            }            
        }

OO gibts seit Platon - hatte der auch C#?

5.658 Beiträge seit 2006
vor 6 Jahren

Hi CWolle,

wenn du den Debugger benutzt, kannst du sehen, was bei der Validierung passiert: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Hier wäre es evtl. besser, die TryParse-Methode zu verwenden, bzw. die CultureInfo der UI (damit das Komma auch als Dezimaltrennzeichen erkannt wird).

Ansonsten gibt es für solche Zwecke auch bereits fertige Lösungen (NumericUpDownControl o.ä.).

Weeks of programming can save you hours of planning

1.040 Beiträge seit 2007
vor 6 Jahren

Die ValidationRule hat mit dem Problem nichts zu tun.
Auch wenn man diese weglässt, kann man in die TextBox kein . und , eingeben.

Wird was mit dem Binding auf einen double zu tun haben, eine Lösung habe ich momentan allerdings auch nicht. 😁

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

hab das gerade mal getestet - also das Problem ist ja nicht, dass er diese Zeichen nicht nimmt sondern eher:
a) Wenn man im Standard einen Punkt eingibt (trotz de-DE-Locale) interpretiert er das als Dezimaltrennzeichen - des Weiteren wird bei der Anzeige quasi weggerundet
b) Wenn man im Standard ein Komma eingibt - wird es als Tausendertrenner interpretiert und entsprechend hochgerechnet

Mit folgendem XAML komm ich auf eine funktionierende Double-TextBox mit deutschem Locale:


<TextBox Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,StringFormat=N2,ConverterCulture='de-DE'}" />

LG

16.842 Beiträge seit 2008
vor 6 Jahren

Recommended ist sowieso double.TryParse-Methode inkl. Angabe der Culture für jegliches Parsen und nicht die Convert.To-Methoden.