我正在尝试执行验证属性。我们有一个可以为空的属性,称为:
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”时,此时应显示错误(红色边框)。我该如何解决?
注意:验证属性为真。
<TextBox Text="{Binding Number, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True, TargetNullValue={x:Static sys:String.Empty},
Converter={x:Static c:IntConverter.Default}}" />