IDataErrorInfo с ValueConverter - PullRequest
       7

IDataErrorInfo с ValueConverter

2 голосов
/ 18 марта 2010

Я как-то не так делаю, но не могу понять:

У меня есть такая модель:

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?

...