Предположим, у меня есть два DatePicker
, я хочу, чтобы дата первого DatePicker
была меньше даты второго DatePicker
. Дата второго DatePicker
должна быть больше, чем у первого.
Если у первого DatePicker
дата больше, чем у второго, то в средстве выбора даты должна появиться ошибка проверки.
Это мои DatePickers
:
<DatePicker x:Name = "StartPeriod"
SelectedDate = "{Binding PeriodStartDate}">
</DatePicker>
<DatePicker x:Name = "EndPeriod"
SelectedDate = "{Binding PeriodEndDate}">
</DatePicker>
Реализуйте интерфейс INotifyDataErrorInfo
в своей модели представления:
public class ViewModel : INotifyDataErrorInfo
{
private readonly Dictionary<string, string> _validationErrors = new Dictionary<string, string>();
private DateTime _periodStartDate;
public DateTime PeriodStartDate
{
get { return _periodStartDate; }
set { _periodStartDate = value; Validate(); }
}
private DateTime _periodEndDate;
public DateTime PeriodEndDate
{
get { return _periodEndDate; }
set { _periodEndDate = value; Validate(); }
}
private void Validate()
{
if (_periodStartDate > _periodEndDate)
_validationErrors.Add(nameof(PeriodStartDate), $"{nameof(PeriodEndDate)} cannot be smaller than {nameof(PeriodStartDate)}");
else
_validationErrors.Clear();
RaiseErrorsChanged(nameof(PeriodStartDate));
}
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
private void RaiseErrorsChanged(string propertyName) =>
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
public bool HasErrors => _validationErrors.Count > 0;
public IEnumerable GetErrors(string propertyName)
{
string error;
if (_validationErrors.TryGetValue(propertyName, out error))
return new string[1] { error };
return null;
}
}
Пожалуйста, обратитесь к статье это для получения дополнительной информации.