Я пытаюсь выполнить проверку свойства. У нас есть свойство обнуляемое:
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
И это свойство привязано к текстовому полю. Я только хочу проверить эти два сценария:
- Представьте, что пользователь оставил текстовое поле пустым (textbox.text = ""), поэтому свойство Number должно получить нулевое значение (вместо "").
- И если пользователь вводит «2b», свойство Number должно иметь нулевое значение (потому что это ошибка), но в текстовом поле все равно должно быть «2b».
Итак, реализация для этого:
public class IntConverter : IValueConverter
{
private static readonly IntConverter defaultInstance = new IntConverter();
public static IntConverter Default { get { return defaultInstance; } }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is int?)
{
int? intValue = (int?)value;
if (intValue.HasValue)
{
return intValue.Value.ToString();
}
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is string)
{
int number;
if (Int32.TryParse((string)value, out number))
{
return number;
}
}
return null;
}
}
Приведенный выше код действительно работает, но только одна вещь не приносит пользы. Когда пользователь вводит «2b», в этот момент должна отображаться ошибка (красная граница). Как я могу это исправить?
ПРИМЕЧАНИЕ. Свойства валидации имеют значение true.
<TextBox Text="{Binding Number, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True, TargetNullValue={x:Static sys:String.Empty},
Converter={x:Static c:IntConverter.Default}}" />