我正在尝试执行验证属性。我们有一个可以为空的属性,称为:
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
这个属性绑定到一个文本框。我只想验证这两个场景:
- 假设用户将文本框留空(textbox.text=""),因此 Number 属性必须接收空值(而不是 "" )。
- 如果用户输入“2b”,Number 属性必须有一个空值(因为是一个错误),但文本框仍然必须说“2b”。
我猜 IDataNotifyError 和 ValidationRules 不适用于此。我该如何解决这些情况?
编辑:当用户输入不正确的格式时,我还使用 ValidationRule 来显示自定义消息。但是当这种情况发生时,不会将属性触发为 null。如果一个 put true 在那个错误中,它会被触发,但不会显示任何错误消息。
<TextBox.Text>
<Binding Path="Number" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" NotifyOnValidationError="True" Converter="{x:Static c:IntConverter.Default}" >
<Binding.ValidationRules>
<r:NumericValidation />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
验证规则
public class NumericValidation : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int? response;
bool noIllegalChars = TryParseStruct<int>(value.ToString(), out response);
if (noIllegalChars == false)
{
return new ValidationResult(false, "Input is not in a correct format.");
}
else
{
return new ValidationResult(true, null);
}
}
...
}