3

我以某种方式做错了,但我无法弄清楚:

我有一个这样的模型:

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 注册错误?

4

0 回答 0