Je le XAML suivant:WPF ValidationRule Dropping Point décimal
<TextBox Name="LevyWageLimitFormulaID_TextBox"
Width="150"
HorizontalAlignment="Center"
Grid.Row="4" Grid.Column="1">
<TextBox.Text>
<Binding Path="SelectedStateRule.LevyRule.WageLimitFormulaID"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<vm:NumericValidator ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Le validateur est défini comme tel:
/// <summary>
/// Numeric Validator to make sure value is numeric
/// </summary>
public class NumericValidator : ValidationRule
{
/// <summary>
/// Validate field is blank or contains only numbers
/// </summary>
/// <param name="value"></param>
/// <param name="cultureInfo"></param>
/// <returns></returns>
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
Decimal _number;
if (!Decimal.TryParse((value as string), out _number) && !String.IsNullOrEmpty(value as string))
{
return new ValidationResult(false, "Value must be numeric");
}
return ValidationResult.ValidResult;
}
}
Cela fonctionne bien jusqu'à ce que je tente de saisir un nombre décimal. Si j'entre '10.'
dans la zone de texte, le point décimal est supprimé (l'utilisateur ne voit jamais le point décimal apparaître dans la zone de texte). Si j'entre '100'
, puis déplacez le curseur manuellement et ajoutez un point décimal pour faire la valeur '10.0'
la validation fonctionne et le point décimal reste.
Je sais que cela est causé par la partie out _number
du Decimal.TryParse
en conjonction avec la validation effectuée dès que la propriété est modifiée (ce qui est l'une des exigences), mais est-il un moyen de corriger cette méthode de telle sorte que Je peux taper '10.'
et le point décimal reste dans la zone de texte?
Oui, vous avez raison. Mais en général, cette approche n'est pas très utile. Vous devriez ajouter un wrapper pour toutes les propriétés. Je suppose qu'il serait préférable de trouver le contrôle "Decimal text box" et de l'utiliser partout où vous avez besoin de liaison aux valeurs décimales. –
La seule différence est que "cette approche" serait implémentée dans le contrôle. Vous ne pouvez toujours pas définir une propriété décimale à autre chose qu'une décimale qui est le point principal ici. – mm8