如何将验证应用于WPF datepicker工具包?如果选择了无效日期,我希望它出错,并且在某些情况下我有到达和离开日期,所以我想验证它以确定到达日期不晚于出发日期。
答案 0 :(得分:7)
似乎比日期选择器验证高出一年was a problem。无论如何,现在它有效。
我不是WPF专家,我会尝试给你一个想法
编写验证规则
public class DateExpiredRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
DateTime orderDate = (DateTime)value;
return new ValidationResult(orderDate < DateTime.Now, "Please, enter date before Now()");
}
}
然后你可以将它附加到datepicker
<!-- since validation works hand by hand with binding,
I use hidden datepicker as binding source -->
<WPFToolkit:DatePicker Name="dateProvider" Visibility="Collapsed">
</WPFToolkit:DatePicker>
<WPFToolkit:DatePicker Name="notExpired">
<WPFToolkit:DatePicker.SelectedDate>
<Binding ElementName="dateProvider" Path="SelectedDate" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:DateExpiredRule/>
</Binding.ValidationRules>
</Binding>
</WPFToolkit:DatePicker.SelectedDate>
</WPFToolkit:DatePicker>
在发生验证错误时指定控制模板。默认情况下,验证错误会更改边框颜当鼠标过度控制时,我使用了额外的工具提示。
关于'picker to picker'验证。
我知道可以在验证规则中使用自定义属性(请参阅msdn示例中的AgeRangeRule)
也许你应该像这样使用这个功能
<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" />
但是为了应用绑定,你需要让MaxDate成为一个DependencyProperty ..你应该肯定地问一个大师;)
除了突出显示之外,您应该考虑拦截datepicker值更改(通过某种类型的datepicker'onchange'事件)并接受或拒绝更改。