我以某种方式做错了,但我无法弄清楚:
我有一个这样的模型:
public class Person : IDataErrorInfo {
public DateTime Birthdate {
get { return _birthdate; }
set {
if (!Valid(value))
AddError("Birthdate", "Birthdate not valid");
_birthdate = value;
}
}
}
像这样的 ValueConverter:
public class DateToStringConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return date.Date.ToShortDateString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
DateTime result;
if (DateTime.TryParse(text, out result))
{
return result;
}
return DependencyProperty.UnsetValue;
}
}
像这样的视图:
<TextBox Text="{Binding Person.Birthdate,
Mode=TwoWay,
Converter={StaticResource DateToStringConverter},
ValidatesOnDataErrors=True}" />
如果有人将“1.1.1950”之类的有效日期修改为“1.1.abc”之类的无效日期,则该值不会传递给 Person 并且不会使其无效。但是显示了生日文本框周围的红色边框。如何保留无效文本(由用户修改)并为 IDataErrorInfo 注册错误?