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");
}
}
但當起始日期改變(當我不希望消息),而不是當結束日期的日期選擇手動更改它纔會觸發。
任何建議,不勝感激
Doh !!!複製和粘貼的陷阱! Thankyou撿起來,也感謝MinimumDateProperty的建議,它完美的工作 – user1667474 2014-10-03 09:37:09
請記住,如果日期已經設置,更新MinimumDate不會「修復」日期,以考慮到這一點。您仍然需要在提交時進行驗證。 – 2014-10-03 16:07:10
@AnthonyMills在選擇器**上設置'MinimumDate'將**更新'Date'屬性以確保'MinimumDate' <='Date' <='MaximumDate' – 2014-10-03 20:00:05