Я реализую IDataErrorInfo в моей ViewModel.Почему IDataErrorInfo показывает ошибки при запуске приложения
У меня есть 'Нома' два свойства & 'Prénom', который я хочу сделать обязательным
#region IDataErrorInfo
string IDataErrorInfo.Error
{
get { return null; }
}
string IDataErrorInfo.this[string propertyName]
{
get { return GetValidationError(propertyName); }
}
#endregion IDataErrorInfo
#region Validation
private static readonly string[] ValidatedProperties = { "Nom", "Prenom" };
public bool IsValid
{
get
{
foreach (string property in ValidatedProperties)
if (GetValidationError(property) != null)
return false;
return true;
}
}
private string GetValidationError(string propertyName)
{
string error = null;
switch (propertyName)
{
case "Nom":
error = ValidateNom();
break;
case "Prenom":
error = ValidatePrenom();
break;
}
return error;
}
private string ValidateNom()
{
if (string.IsNullOrWhiteSpace(Nom))
{
return "Last name is mandatory";
}
return null;
}
private string ValidatePrenom()
{
if (string.IsNullOrWhiteSpace(Prenom))
{
return "First name is mandatory";
}
return null;
}
Я связывании Текст attribut моего TextBox вроде этого:
<TextBox Text="{Binding Nom,
ValidatesOnDataErrors=True,
UpdateSourceTrigger=LostFocus,
NotifyOnValidationError=True}" />
Моя проблема:: текстовые поля отображают ошибку (при запуске приложения) перед потерей фокуса.
Я делаю это (в случае щелчка), поэтому он должен показать ошибку после щелчка, а не раньше:
if (!IsValid)
return;
Это не нормальное поведение, потому что пустые поля не проходят проверку? Возможно, вам придется использовать 'UpdateSourceTrigger = Explicit', чтобы сделать эту работу так, как вы этого хотите. – Sheridan
Я изменил его на Явный, но результат всегда тот же –
@Sheridan Что заставляет меня сходить с ума, так это то, что я не делаю тест IsValid при запуске приложения :( –