나는 다음과 같은 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'
값이 유효하게되고 소수점이 유지되도록하십시오.
이 내용은 Decimal.TryParse
부분의 out _number
부분이 속성이 변경되면 바로 수행된다는 사실을 알고 있지만 (이 중 하나는 요구 사항 중 하나임)이 방법을 수정하는 방법이 있습니다. 나는 '10.'
을 입력 할 수 있으며 소수점은 텍스트 상자에 남아 있습니까?
예, 당신이 옳다. 그러나 일반적으로이 방법은별로 유용하지 않습니다. 모든 속성에 대해 래퍼를 추가해야합니다. "십진수 텍스트 상자"컨트롤을 찾아 십진수 값에 바인딩해야하는 모든 곳에서 사용하는 것이 더 낫습니다. –
유일한 차이점은 "이 접근 방식"이 컨트롤에 구현된다는 것입니다. 여전히 10 진수를 10 진수가 아닌 다른 값으로 설정할 수는 없습니다. – mm8