启动时出现Wpf DatePicker验证错误

时间:2015-05-06 19:26:05

标签: c# wpf validation datepicker

我有一个标准的wpf datepicker框,其中绑定了 SelectedDate

<DatePicker x:Name="EffDatePicker" SelectedDate="{Binding EffectiveDate, Mode=OneWayToSource}"/>

当页面加载时,日期选择器会突出显示红色边框,表明验证失败,可能是因为未设置EffectiveDate。

Validation error!

我可以在启动时设置生效日期,但后来我丢失了内置的“选择日期”水印,我想保留。我也可以在绑定中设置TargetNullValue,但之后我又丢失了那个水印。我正在使用OneWayToSource,因为日期只是由用户设置,而不是通过模型。也许我错误地使用了它?

当用户选择日期时,它会在模型​​中正确设置EffectiveDate属性,并且错误消失。

我知道我可以将验证错误模板设置为{x:Null}禁止显示红色边框,但这会让人感到烦恼。我也见过this question,但看起来这个问题来自绑定到文字而不是 SelectedDate

有人能建议修复验证错误的正确方法,而不是隐藏它吗?

提前致谢,

1 个答案:

答案 0 :(得分:3)

您可以编写自己的DatePicker以与DateTime一起使用。

假设您的视图模型中有可用的public class MainViewModel : ViewModelBase { public MainViewModel() {} public DateTime? EffectiveDate { get; set; } } 属性,例如

...
xmlns:rules="clr-namespace:YourNameSpace.ValidationRules"
...
<DatePicker x:Name="EffDatePicker">
    <DatePicker.SelectedDate>
        <Binding Path="EffectiveDate" 
                 Mode="OneWayToSource" 
                 UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <rules:DateRule/>
            </Binding.ValidationRules>
        </Binding>
    </DatePicker.SelectedDate>
</DatePicker>

在你的XAML中你有

namespace YourNameSpace.ValidationRules
{
    public class DateRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            return new ValidationResult(value is DateTime || value == null, null);
        }
    }
}

然后以下规则就是技巧

{{1}}