只是一些代码…:
问题在底部。
XAML
:
<StackPanel Orientation="Horizontal">
<Button Content="Start" Command="{Binding FirstDateCommand}" />
<Button Content="Back" Command="{Binding PreviousDateCommand}" />
<DatePicker SelectedDate="{Binding SelectedDate}" DisplayDateStart="{Binding MinDate}" DisplayDateEnd="{Binding MaxDate}" />
<Button Content="Forward" Command="{Binding NextDateCommand}" />
<Button Content="End" Command="{Binding LastDateCommand}" />
</StackPanel>
视图模型
:
public class LessonPlannerViewModel : ViewModelBase
{
private ILessonPlannerRepository _lessonplannerRepo;
private ObservableCollection<LessonDay> _lessons;
private RelayCommand _firstDateCommand;
private RelayCommand _lastDateCommand;
private RelayCommand _nextDateCommand;
private RelayCommand _previousDateCommand;
public LessonPlannerViewModel()
{
_lessonplannerRepo = new LessonPlannerRepository();
MinDate = DateTime.Now.AddDays(-2);
MaxDate = DateTime.Now.AddDays(2);
SelectedDate = DateTime.Now;
}
public RelayCommand FirstDateCommand
{
get { return _firstDateCommand ?? (_firstDateCommand = new RelayCommand(() => MoveFirstDate(), () => CanMoveFirstDate())); }
}
public RelayCommand LastDateCommand
{
get { return _lastDateCommand ?? (_lastDateCommand = new RelayCommand(() => MoveLastDate(), () => CanMoveLastDate())); }
}
public RelayCommand PreviousDateCommand
{
get { return _previousDateCommand ?? (_previousDateCommand = new RelayCommand(() => MovePreviousDate(), () => CanMovePreviousDate())); }
}
public RelayCommand NextDateCommand
{
get { return _nextDateCommand ?? (_nextDateCommand = new RelayCommand(() => MoveNextDate(), () => CanMoveNextDate())); }
}
private void MoveFirstDate()
{
SelectedDate = MinDate;
Lessons = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
}
private void MoveLastDate()
{
SelectedDate = MaxDate;
Lessons = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
}
private void MoveNextDate()
{
SelectedDate = SelectedDate.AddDays(1);
Lessons = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
}
private void MovePreviousDate()
{
SelectedDate = SelectedDate.AddDays(-1);
Lessons = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
}
private bool CanMoveFirstDate()
{
return SelectedDate != MinDate;
}
private bool CanMoveLastDate()
{
return SelectedDate != MaxDate;
}
private bool CanMoveNextDate()
{
return SelectedDate < MaxDate;
}
private bool CanMovePreviousDate()
{
return SelectedDate > MinDate;
}
private DateTime _selectedDate;
public DateTime SelectedDate
{
get { return _selectedDate; }
set
{
if (_selectedDate == value)
return;
_selectedDate = value;
this.RaisePropertyChanged("SelectedDate");
//Lessons = _lessonplannerRepo.GetLessonDayByDate(SelectedDate);
}
}
public DateTime MinDate { get; set; }
public DateTime MaxDate { get; set; }
public ObservableCollection<LessonDay> Lessons
{
get { return _lessons; }
set
{
_lessons = value;
this.RaisePropertyChanged("Lessons");
}
}
...
当我在datepicker中选择一个等于mindate的日期时,previouusdate命令返回canexecute=false;t
帽子可以,按预期工作
.
但是为什么lastdatecommand
不返回canexecute=false吗?
当我按下
“上一个日期”按钮
相反
通过选择日期
数据记录器
.
我做错什么了?
更新
:
我没有怀疑我的逻辑是错误的,但是…我试过一些东西,用这个密码
这真的很奇怪。我现在更改了lastdate和previousdate canexecute方法的逻辑,两个按钮现在都可以更改日期选择器。
private bool CanMoveFirstDate()
{
Debug.WriteLine("SelectedDate FirstDate: " + SelectedDate);
return SelectedDate > MinDate;
}
private bool CanMovePreviousDate()
{
Debug.WriteLine("SelectedDate PreviousDate: " + SelectedDate);
return SelectedDate > MinDate;
}
有人知道如何使nextdate+lastdate按钮工作得到解决方案吗?P
更新2:
绑定功能强大,但可能难以控制…
我又犯了一些疯狂的逻辑错误,现在看来它起作用了:
private bool CanMoveNextDate()
{
Debug.WriteLine("SelectedDate NextDate: " + SelectedDate);
return SelectedDate.AddDays(1) < MaxDate;
}
private bool CanMoveLastDate()
{
Debug.WriteLine("SelectedDate LastDate: " + SelectedDate);
return SelectedDate.AddDays(1) < MaxDate;
}
如果有人能
解释
这种奇怪的逻辑,那将是很好的,我认为原因在于日期选择器和命令的绑定,以及哪个绑定首先被更新或被调用等等…