假设我有两个DatePicker
,我希望第一个DatePicker
日期必须小于第二个DatePicker
。第二个DatePicker
的日期必须比第一个日期大。
如果第一个DatePicker
的日期比第二个大,则日期选择器上应出现验证错误。
这些是我的DatePickers
:
<DatePicker x:Name="StartPeriod"
SelectedDate="{Binding PeriodStartDate}">
</DatePicker>
<DatePicker x:Name="EndPeriod"
SelectedDate="{Binding PeriodEndDate}">
</DatePicker>
答案 0 :(得分:1)
在您的视图模型中实现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;
}
}
有关更多信息,请参阅this文章。