日期选择器验证WPF

dev*_*per 9 validation wpf datepicker

如何将验证应用于WPF datepicker工具包?如果选择了无效日期,我希望它出错,并且在某些情况下我有到达和离开日期,所以我想验证它以确定到达日期不晚于出发日期.

jon*_*nny 8

似乎一年以上的日期选择器验证是一个问题.无论如何,现在它的工作原理.

我不是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()");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以将它附加到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>
Run Code Online (Sandbox Code Playgroud)

发生验证错误时指定控制模板.默认情况下,验证错误会更改边框颜 当鼠标过度控制时,我使用了额外的工具提示.

替代文字

源代码

关于'picker to picker'验证.

我知道可以在验证规则中使用自定义属性(请参阅msdn示例中的AgeRangeRule )

也许你应该像这样使用这个功能

<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" />
Run Code Online (Sandbox Code Playgroud)

但是为了应用绑定,你需要让MaxD​​ate成为一个DependencyProperty ..你应该肯定地问一个大师;)

您应该考虑拦截datepicker值更改(通过某种类型的datepicker'onchange'事件)并接受或拒绝更改,而不是突出显示.