我有一个标准的wpf datepicker框,其中绑定了 SelectedDate :
<DatePicker x:Name="EffDatePicker" SelectedDate="{Binding EffectiveDate, Mode=OneWayToSource}"/>
当页面加载时,日期选择器会突出显示红色边框,表明验证失败,可能是因为未设置EffectiveDate。
我可以在启动时设置生效日期,但后来我丢失了内置的“选择日期”水印,我想保留。我也可以在绑定中设置TargetNullValue,但之后我又丢失了那个水印。我正在使用OneWayToSource,因为日期只是由用户设置,而不是通过模型。也许我错误地使用了它?
当用户选择日期时,它会在模型中正确设置EffectiveDate
属性,并且错误消失。
我知道我可以将验证错误模板设置为{x:Null}
并禁止显示红色边框,但这会让人感到烦恼。我也见过this question,但看起来这个问题来自绑定到文字而不是 SelectedDate 。
有人能建议修复验证错误的正确方法,而不是隐藏它吗?
提前致谢,
答案 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}}