日期选择器显示默认日期1/1/0001-C#WPF

日期选择器显示默认日期1/1/0001-C#WPF,c#,wpf,datepicker,C#,Wpf,Datepicker,我在C#WPF中使用了一个日期选择器,它在XAML中定义为: <DatePicker x:Name="TheDate" Width="200" Text="{Binding ReportPlanningDate ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsTodayHighlighted="True" /> 即使我将IsTodayHighlighted设置为T

我在C#WPF中使用了一个日期选择器,它在XAML中定义为:

  <DatePicker  x:Name="TheDate"  Width="200" Text="{Binding ReportPlanningDate ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsTodayHighlighted="True" />

即使我将
IsTodayHighlighted
设置为
True
,它也会显示
1/1/0001
。我在这里遗漏了什么?

IsTodayHighlighted
只突出显示当前日期(如果您将日历滚动到当前日期,您将看到它突出显示),但它没有选择它。 如果将属性
Text
绑定到ViewModel的属性,则该属性是数据驱动的,因此它将根据数据选择日期。由于未设置数据,因此它具有默认值(1.1.0001)。
要解决此问题,请指定默认值:

public DateTime _ReportPlanningDate = DateTime.Now;

IsTodayHighlighted
仅用于突出显示今天的日期。未设置默认日期。如果要设置默认日期,则需要设置
SelectedDate
属性

<my:DatePicker SelectedDate="{x:Static sys:DateTime.Now}"/>

如本节所述。

将支持字段标记为私有

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}

如果您在
集合
中放置断点,是否会在加载页面时命中该断点?如果是,那么
value
的值是多少?它说:value={1/1/0001 12:00:00 AM}@alexeit然后,确保将其设置为当前日期。您可以将
\u ReportPlanningDate
设置为
DateTime。现在.date也在ViewModel的构造函数中,您可以在其中编写更详细的逻辑。请注意,backing字段应该是private,而不是public,但这不是面向MVVM的,应该为
SelectedDate
PlanningDate在项目中的其他位置进行绑定。thnx用于“专用”注释。
public class MyVM : ViewModelBase {
    public MvVM() {
        _ReportPlanningDate = DateTime.Now.Date;
<DatePicker SelectedDate={Binding ReportPlanningDate}