我在C#WPF中使用了一个日期选择器,它在XAML中被定义为:
<DatePicker x:Name="TheDate" Width="200" Text="{Binding ReportPlanningDate ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsTodayHighlighted="True" />
绑定属性ReportPlanningDate
定义为:
public DateTime ReportPlanningDate
{
get { return _ReportPlanningDate; }
set
{
if (_ReportPlanningDate == value) return;
_ReportPlanningDate = value;
PlanningDate = _ReportPlanningDate;
OnPropertyChanged("ReportPlanningDate");
}
}
public DateTime _ReportPlanningDate;
public DateTime PlanningDate;
即使我将IsTodayHighlighted
设置为True
,也会显示1/1/0001
。我在这里缺少什么?
答案 0 :(得分:1)
IsTodayHighlighted
仅突出显示当前日期(如果您将日历滚动到当天,您会看到它已突出显示),但它不会选中它。
如果您将属性Text
绑定到ViewModel的属性,则它是数据驱动的,因此它将根据数据选择日期。由于未设置数据,因此它具有默认值(1.1.0001。)
要解决此问题,请指定默认值:
public DateTime _ReportPlanningDate = DateTime.Now;
答案 1 :(得分:1)
将支持字段标记为私有
private DateTime _ReportPlanningDate; // only the property is public
//public DateTime PlanningDate; what's this?
您可以在ViewModel的构造函数中设置它
public class MyVM : ViewModelBase {
public MvVM() {
_ReportPlanningDate = DateTime.Now.Date;
你应该绑定日期选择器的选定日期
<DatePicker SelectedDate={Binding ReportPlanningDate}
答案 2 :(得分:0)
IsTodayHighlighted
仅用于突出显示今天的日期。未设置默认日期。如果要设置默认日期,则需要设置SelectedDate
属性。
<my:DatePicker SelectedDate="{x:Static sys:DateTime.Now}"/>
如果需要,请添加此引用。
xmlns:sys="clr-namespace:System;assembly=mscorlib"
如此link中所述。