1

我有一個綁定到一個對象從INotifyPropertyChanged的繼承2個datepickers - 這裏是在表單頁面日期時間屬性代碼Xamarin.Forms 2個DatePickers不要讓結束日期爲起始日期之前

private DateTime _startDate; 

public DateTime StartDate 
{ 
    get { return _startDate; } 
    set 
    { 
     if (DateTime.Compare(value, _startDate) == 0) 
     { 
      return; 
     } 
     _startDate = value; 
     OnPropertyChanged(); 
    } 
} 

//public DateTime StartDate { get; set; } 

private DateTime _endDate; 
public DateTime EndDate 
{ 
    get { return _endDate; } 
    set 
    { 

     if (DateTime.Compare(value, _endDate) == 0) 
     { 
      return; 
     } 
     _endDate = value; 
     OnPropertyChanged(); 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 
void OnPropertyChanged([CallerMemberName] string propertyName = null) 
{ 
    var handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

我有這個

 DatePicker startDate = new DatePicker 
     { 
      BindingContext = uCoSafe, 
      Format = "D" 
     }; 
     startDate.SetBinding(DatePicker.DateProperty, new Binding("StartDate", BindingMode.OneWayToSource)); 

     startDate.PropertyChanged +=(sender, e) => 
      { 
       uCoSafe.EndDate = uCoSafe.StartDate.AddDays(1); 

      }; 
     MyCoLabel endDateLbl = new MyCoLabel(1, "End Date"); 
     DatePicker endDate = new DatePicker 
     { 
      BindingContext = uCoSafe, 
      Format = "D" 
     }; 
     endDate.SetBinding(DatePicker.DateProperty, new Binding("StartDate", BindingMode.TwoWay)); 

這一切工作正常。如果我更改開始日期,則更新結束日期。

我也想要它,如果結束日期是手動更改,那麼它不能在開始日期之前設置。

我想這

endDate.PropertyChanged += (sender, e) => 
{ 
    if (uCoSafe.EndDate.Date <= uCoSafe.StartDate.Date) 
    { 
     uCoSafe.EndDate = uCoSafe.StartDate.AddDays(1); 
     DisplayAlert("End Date Error", "End date cannot be earlier than the start date, please try again", "OK"); 
    } 

} 

但當起始日期改變(當我不希望消息),而不是當結束日期的日期選擇手動更改它纔會觸發。

任何建議,不勝感激

回答

2

您的endDate結合看起來是錯誤的。您寫道:

endDate.SetBinding(DatePicker.DateProperty, new Binding("StartDate", BindingMode.TwoWay)); 

而且你可能是指:

endDate.SetBinding(DatePicker.DateProperty, new Binding("EndDate", BindingMode.TwoWay)); 
                 ^^^^^^^^^ 

,這應該讓你回到賽道上。

現在,會做在這種情況下,而不是在錯誤的情況下顯示警告,只是防止用戶做出這樣的錯誤,通過綁定endDateMinimumDatePropertyuCoSafe.StartDate。這可能會在最後提供更好的用戶體驗,恕我直言。

+0

Doh !!!複製和粘貼的陷阱! Thankyou撿起來,也感謝MinimumDateProperty的建議,它完美的工作 – user1667474 2014-10-03 09:37:09

+0

請記住,如果日期已經設置,更新MinimumDate不會「修復」日期,以考慮到這一點。您仍然需要在提交時進行驗證。 – 2014-10-03 16:07:10

+0

@AnthonyMills在選擇器**上設置'MinimumDate'將**更新'Date'屬性以確保'MinimumDate' <='Date' <='MaximumDate' – 2014-10-03 20:00:05

相關問題