日期选择器验证 WPF

Posted

技术标签:

【中文标题】日期选择器验证 WPF【英文标题】:Date picker validation WPF 【发布时间】:2011-02-06 08:11:51 【问题描述】:

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

【问题讨论】:

【参考方案1】:

日期选择器验证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()");
    

然后你可以将它附加到日期选择器

    <!-- 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>

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

source code

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

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

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

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

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

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

【讨论】:

非常感谢您的回复..我有一个问题,我该如何验证 2 个日期选择器中的日期。例如,我有到达日期日期选择器和出发日期日期选择器。我该如何验证这两个,以使到达日期始终小于(之前)出发日期?

以上是关于日期选择器验证 WPF的主要内容,如果未能解决你的问题,请参考以下文章

WPF 日期选择器图标大小

输出到数据绑定日期选择器 wpf 的 SelectedDate 属性

是否存在 WPF .NET 3.0 日期选择器?

WPF 工具包,如何在 C# 中为日期选择器控件应用日期格式?

一个好的 WPF 滚动时间线控件? (花哨的日期时间选择器)

将 WPF Toolkit 日期选择器的值重置为“默认”值