我有一个viewmodel包含一对DateTime?对象 - 可为空的DateTimes。WPF:使用两个DatePickers来表示一个日期范围
private DateTime? _xmitdtFrom;
public DateTime? xmitdtFrom
{
get { return this._xmitdtFrom; }
set
{
this._xmitdtFrom = value;
notifyPropertyChanged("xmitdtFrom");
}
}
private DateTime? _xmitdtTo;
public DateTime? xmitdtTo
{
get { return this._xmitdtTo; }
set
{
this._xmitdtTo = value;
notifyPropertyChanged("xmitdtTo");
}
}
的xmitdtFrom日期不能超过xmitdtFrom日期越大,xmitdtTo日期不能是xmitdtFrom日期之前,而且无论是xmitdtTo日期,而不是xmitdtFrom能后的今天。
因此,在标记我有这样的:
<Label Grid.Row="1" Grid.Column="1">
From:
</Label>
<DatePicker Grid.Row="1" Grid.Column="2"
SelectedDate="{Binding xmitdtFrom, Mode=TwoWay}"
DisplayDateEnd="{Binding xmitdtTo}"
/>
<Label Grid.Row="2" Grid.Column="1">
Through:
</Label>
<DatePicker Grid.Row="2" Grid.Column="2"
SelectedDate="{Binding xmitdtTo, Mode=TwoWay}"
DisplayDateStart="{Binding xmitdtFrom}"
DisplayDateEnd="{x:Static sys:DateTime.Now}"
/>
这工作得很好,除非xmitdtTo为空 - 在这种情况下xmitdtFrom是不受限制的,这是一个问题。
我想要的是将xmitdtFrom的DisplayDateEnd设置为xmitdtTo(如果它不为null)或DateTime.Now(如果是)。
我想知道什么可能是完成这个最简洁的方法。
你真的应该执行你的约会验证与'IDataErrorInfo'您的视图模型,并没有UI尝试使完成它/禁用日期范围。毕竟,我认为任何东西都不会阻止用户将日期复制/粘贴到日期框中。 – Rachel
在xaml中设置DisplayDateEnd =“{x:Static sys:DateTime.Now}”会在用户在午夜截止时打开应用程序时给您一个潜在的错误,使得某人即使选择了新的一天也不可能一个有效的选择。这是一个不太可能发生的事情,这取决于你的应用程序的使用情况,但我想我会指出它,因为它加强了Rachel的观点。 –
我非常强烈地感觉到,这是一个更好的UI设计,用于禁用用户不允许选择的选项,而不是允许他选择某些内容,然后在之后告诉他他错了。验证仍然是必要的,以防用户输入日期而不是选择日期,但允许无效日期在日历中处于活动状态是一个非常糟糕的主意。 –