Я пытаюсь выполнить проверку свойства. У нас есть свойство обнуляемое:
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
И это свойство привязано к текстовому полю. Я только хочу проверить эти два сценария:
- Представьте, что пользователь оставил текстовое поле пустым (textbox.text = ""), поэтому свойство Number должно получить нулевое значение (вместо "").
- И если пользователь вводит «2b», свойство Number должно иметь нулевое значение (потому что это ошибка), но в текстовом поле все равно должно быть «2b».
Полагаю, IDataNotifyError и ValidationRules не работают для этого. Как я могу разрешить эти ситуации?
РЕДАКТИРОВАТЬ: я также использую ValidationRule, чтобы показать пользовательское сообщение, когда пользователь вводит неправильный формат. Но когда это происходит, свойство не срабатывает до нуля. И если в этой ошибке указано значение 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);
}
}
...
}