У меня есть следующий код XAML:WPF ValidationRule каплепадение Десятичного
<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>
Валидатор определяются как таковые:
/// <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;
}
}
Это работает отлично, пока я пытаюсь ввести десятичное число. Если я введу '10.'
в текстовое поле, то десятичная точка будет удалена (пользователь никогда не увидит десятичную точку в текстовом поле). Если я введу '100'
, а затем переместите курсор вручную и добавьте десятичную точку, чтобы сделать значение '10.0'
, валидация работает, и десятичная точка остается.
Я знаю, что это вызвано частью out _number
Decimal.TryParse
в сочетании с проверкой подлинности, как только свойство изменено (что является одним из требований), но есть способ исправить этот метод таким образом, чтобы Я могу ввести '10.'
и оставить десятичную точку в текстовом поле?
Да, вы правы. Но в целом этот подход не очень полезен. Вы должны добавить оболочку для всех свойств. Я думаю, было бы лучше найти элемент управления «Десятичное текстовое поле» и использовать его везде, где вам нужна привязка к десятичным значениям. –
Единственное отличие в том, что «этот подход» будет реализован в элементе управления. Вы по-прежнему не можете установить десятичное свойство для чего-то еще, чем десятичное значение, которое здесь является основным. – mm8