2
我有兩個Date拾取器 - 一個用於「From」,另一個用於「To」。如果From日期變爲大於To日期,我有要求將To date更改爲From日期 - 反之亦然。目前,如果在選擇「起始日期」後重點關注「截止日期」的文本框,則set屬性會觸發兩次,從而重置正確的日期。但是,如果我從日曆控件中選擇一個日期而不是鍵入它,它可以正常工作。使用Silverlight 4中的datepickers問題
這裏是我的XAML:
<Grid Grid.Row="1" VerticalAlignment="Top" BindingValidationError="dateVisitStartFrom_BindingValidationError">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock Text="From: "></TextBlock>
<basics:DatePicker VerticalAlignment="Top" Height="20" x:Name="dateVisitStartFrom" SelectedDate="{Binding VisitStartDateFrom,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnExceptions=True}" Style="{StaticResource DatePickerStyle1}" >
<!--<interactivity:Interaction.Triggers>
<interactivity:EventTrigger EventName="BindingValidationError">
<MVVMLight:EventToCommand Command="{Binding RectifyDateValidationErrorCommand}"></MVVMLight:EventToCommand>
</interactivity:EventTrigger>
</interactivity:Interaction.Triggers>-->
</basics:DatePicker>
<TextBlock Text="To: " Margin="10,0,0,0"></TextBlock>
<basics:DatePicker x:Name="dateVisitStartTo" VerticalAlignment="Top" Height="20" SelectedDate="{Binding VisitStartDateTo,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnExceptions=True}" Style="{StaticResource DatePickerStyle1}"></basics:DatePicker>
</StackPanel>
</Grid>
這裏是VM:
private DateTime visitStartDateFrom = System.DateTime.Now.Subtract(new TimeSpan(7,0,0,0));
public DateTime VisitStartDateFrom
{
get
{
return visitStartDateFrom;
}
set
{
visitStartDateFrom = value;
if (visitStartDateFrom > visitStartDateTo)
{
throw new Exception();
//visitStartDateTo = visitStartDateFrom;
//OnPropertyChanged("VisitStartDateTo");
}
//OnPropertyChanged("VisitStartDateFrom");
}
}
private DateTime visitStartDateTo = System.DateTime.Now;
public DateTime VisitStartDateTo
{
get
{
return visitStartDateTo;
}
set
{
{
visitStartDateTo = value;
if (visitStartDateFrom > visitStartDateTo)
{
//visitStartDateFrom = visitStartDateTo;
//OnPropertyChanged("VisitStartDateFrom");
throw new Exception();
}
//OnPropertyChanged("VisitStartDateTo");
}
}
}
,這裏是在代碼中bindingvalidationerror功能落後。
private void dateVisitStartFrom_BindingValidationError(object sender, ValidationErrorEventArgs e)
{
if (e.Action == ValidationErrorEventAction.Added)
{
if (((DatePicker)e.OriginalSource).Name == "dateVisitStartFrom")
{
dateVisitStartFrom.Focus();
this.UpdateLayout();
dateVisitStartTo.SelectedDate = ((DatePicker)e.OriginalSource).SelectedDate;
}
else
{
dateVisitStartFrom.SelectedDate = ((DatePicker)e.OriginalSource).SelectedDate;
}
}
}
可以看出,我已經嘗試了很多辦法,但似乎沒有糾正這一錯誤。任何解決方案將節省我的一天...