2017-03-06 38 views
0

我正在使用C#WPF中的日期選擇器,它是在XAML定義爲:的DatePicker顯示默認的日期1/1/0001 - C#WPF

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

Binding屬性被定義爲:

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。我在這裏錯過了什麼?

+1

如果你在'set'中放置了一個斷點,它會在加載頁面的過程中被擊中嗎?如果是,「價值」的價值是什麼? – Alexei

+0

它說:價值= {1/1/0001 12:00:00 AM} @Alexei – user7157732

+1

然後,確保您將其設置爲當前日期。 – Alexei

回答

1

IsTodayHighlighted只會突出顯示當前日期(如果您將日曆滾動到當前日期,您會看到它突出顯示),但不會將其選中。 如果您將屬性Text綁定到ViewModel的屬性,它是數據驅動的,所以它會根據數據選擇日期。由於數據未設置,它具有默認值(1.1.0001)。
爲了解決這個問題,指定默認值:

public DateTime _ReportPlanningDate = DateTime.Now; 
+0

oops。現在工作。愚蠢的錯誤。謝謝 – user7157732

+1

您也可以在ViewModel的構造函數中將'_ReportPlanningDate'設置爲'DateTime.Now.Date',您可以在其中編寫更詳細的邏輯。請注意,後臺字段應該是**私有的,而不是公開的** – 2017-03-06 08:39:23

0

IsTodayHighlighted只是用來強調今天的日期。不設置默認日期。如果要設置默認日期,則需要設置SelectedDate屬性。

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

如果需要,添加此參考。

xmlns:sys="clr-namespace:System;assembly=mscorlib" 

正如在這link中所述。

+0

但這是**不是** MVVM導向的,對於'SelectedDate'預期* binding * – 2017-03-06 08:42:06

1

馬克支持字段爲私有

private DateTime _ReportPlanningDate; // only the property is public 
//public DateTime PlanningDate; what's this? 

您可以設置它的視圖模型

public class MyVM : ViewModelBase { 
    public MvVM() { 
     _ReportPlanningDate = DateTime.Now.Date; 

構造函數,你應該日期選取器的選定的日期綁定

<DatePicker SelectedDate={Binding ReportPlanningDate} 
+0

PlanningDate正在項目中的其他地方。 thnx關於「私人」的說明。 – user7157732