日期选择器验证 WPF

9
如何对WPF日期选择器工具应用验证?如果选择了无效的日期,我希望它会出现错误。在某些情况下,我有到达和离开日期,所以我想验证一下到达日期不晚于离开日期。
1个回答

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()");
    }
}

然后您可以将其附加到日期选择器。
    <!-- 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>

当验证错误发生时,指定控件模板。默认情况下,验证错误会更改边框颜色。我在鼠标悬停在控件上时使用了额外的工具提示。

alt text

源代码

关于“选择器到选择器”的验证。

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

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

<local:MaxDateRule MaxDate="{Binding ElementName=DepartureDatePicker, Path=SelectedDate" />

但是为了应用绑定,您需要将MaxDate设置为DependencyProperty.. 您应该确实向专家询问;)

与其突出显示,您应该考虑拦截日期选择器值更改(通过某种类型的日期选择器“onchange”事件),并接受或拒绝更改。


非常感谢您的回复。我有一个问题,如何验证两个日期选择器中的日期。例如,我有到达日期选择器和离开日期选择器。我该如何验证这两个日期,以确保到达日期始终早于(在)离开日期? - developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接