我試圖執行驗證屬性。我們有一個可以爲空的屬性叫:使用IValueConverter驗證可爲空的int
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
而且這個屬性綁定到一個文本框。我只是想驗證這兩escenarios:
- 試想一下,用戶留下的文本框爲空(textbox.text =「」),所以號碼屬性必須接受空值(而不是「」)。
- 如果用戶輸入「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}}" />
我已經更新了問題 –
我的答案仍然是一樣的。每當Number屬性爲null時,實現IDataErrorInfo將發生錯誤。 – m0sa