Я пытаюсь выполнить свойство проверки. У нас есть свойство nullable:Как проверить данные в WPF и установить значение по умолчанию?
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
И это свойство связано с текстовым полем. Я только хочу, чтобы проверить это два escenarios:
- Представьте, что пользователь оставил текстовое поле пустым (TextBox.Text = «»), так что номер свойство должно получить нулевое значение (вместо «»).
- И если пользователь вводит «2b», свойство Number должно иметь нулевое значение (потому что это ошибка), но текстовое поле должно все еще указывать «2b».
Я думаю, что IDataNotifyError и ValidationRules не работают для этого. Как я могу разрешить эти ситуации?
EDIT: Я также использую ValidationRule для отображения пользовательского сообщения, когда пользователь вводит неверный формат. Но когда это происходит, не убирает свойство null. И если значение 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);
}
}
...
}
Как ValidationRules не работают в этой ситуации? –
@Kai Поскольку валидация предназначена только для того, чтобы сообщить пользователю некоторые ограничения проверки. Я имею в виду, что он не рассматривает логику, как в этом случае. –