WPF DateTimePicker验证后没有设置日期
问题描述:
我想验证日期时间选择器控件中选定的日期,并将其设置为今天的日期,如果选择的日期是> Datetime.Today。我面临的问题是, m无法通过xaml.I设置一个datetimepicker控件的SelectedDate属性,我觉得我的绑定有问题,请你帮忙吗?WPF DateTimePicker验证后没有设置日期
以下是code.Please你可以告诉我我做错了什么?
<Controls:DatePicker Height="20"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
x:Name="dateControl"
IsTodayHighlighted="True"
Margin="5,10,5,20"
SelectedDate="{Binding Path=BindingDate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
public class Context : INotifyPropertyChanged
{
public Context() { }
private DateTime bindingDate = DateTime.Today;
public DateTime BindingDate
{
get
{
return bindingDate;
}
set
{
if (DateTime.Compare(DateTime.Today, value) < 0)
{
MessageBox.Show("Please Select Today date or older, Should not select future date");
//这不会反映在控件的SelectedDate属性中的任何时候,为什么? value = DateTime.Today; } bindingDate = value; OnPropertyChanged(“BindingDate”); }}
..和是我设置窗口的datacontext类似如下:
public Window1()
{
InitializeComponent();
this.DataContext = new Context();
}
任何建议将高度赞赏。
感谢, -Mike
答
这是因为,如果你的局部变量bindingDate
设定值BindingDate
制定者将永远不会被调用,您的用户界面将永远不会被通知。
而不是设置
private DateTime bindingDate = DateTime.Today.AddDays(13);
尝试设置
BindingDate = DateTime.Today.AddDays(13);
编辑
但选择一个将来的日期在日期选择,因为选择已经将显示在MessageBox后仍保留的在控制中完成并且不会重置。
但是你可以考虑像使用日期选择器的BlackoutDates或DisplayDates财产或作为后下
答
提到你可以求索使用自定义的验证规则阻止来自所有选择将来的日期其他替代品你也可以考虑实现INotifyPropertyChanging,而不仅仅是INotifyPropertyChanged。 这样你就可以通知你的财产即将改变,并相应地运行一些代码。 当然通知你的财产已经有效改变。
我的问题是,如果我选择未来的日期在控制说20/12/2011,控制设置日期为2011年12月20日,即使添加验证绑定property.My问题是,为什么DatetimePicker的选定日期没有选择验证后设置的日期(即Datetime.Today)? – Mike