2011-03-09 71 views
0

我想驗證日期時間選擇器控件中選定的日期,並將其設置爲今天的日期,如果選擇的日期是> 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

回答

1

這是因爲,如果你的局部變量bindingDate設定值BindingDate制定者將永遠不會被調用,您的用戶界面將永遠不會被通知。

而不是設置

private DateTime bindingDate = DateTime.Today.AddDays(13); 

嘗試設置

BindingDate = DateTime.Today.AddDays(13); 

編輯

但選擇一個將來的日期在日期選擇,因爲選擇已經將顯示在MessageBox後仍保留的在控制中完成並且不會重置。

但是你可以考慮像使用日期選擇器的BlackoutDatesDisplayDates財產或作爲後下

Date picker validation WPF

+0

我的問題是,如果我選擇未來的日期在控制說20/12/2011,控制設置日期爲2011年12月20日,即使添加驗證綁定property.My問題是,爲什麼DatetimePicker的選定日期沒有選擇驗證後設置的日期(即Datetime.Today)? – Mike

0

提到你可以求索使用自定義的驗證規則阻止來自所有選擇將來的日期其他替代品你也可以考慮實現INotifyPropertyChanging,而不僅僅是INotifyPropertyChanged。 這樣你就可以通知你的財產即將改變,並相應地運行一些代碼。 當然通知你的財產已經有效改變。