2017-02-20 61 views
0

想知道您是否可以幫助我。我有一個DataGrid,用戶將在DataGrid中添加新行。我有一個DatePicker綁定到ViewModel中的ObersableCollection集合。Binded DataGrid中的新行顯示DatePicker爲01/01/0001

當我通過雙擊最後一行創建一個新行時,DatePicker默認爲01/01/0001。

這裏定義的我已經使用轉換器的嘗試:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    DateTime dateValue = (DateTime)value; 
    return dateValue.ToShortDateString() == "01/01/0001" ? DateTime.Now : value; 
} 

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return value; 
} 

我加入這個轉換器的綁定。這將UI顯示爲DateTime.Now,但是當它進入ObservableCollection時,DateTime值仍然是01/01/0001。因此,當我將更改保存到數據庫時,出現將DateTime2轉換爲DateTime的錯誤。

有沒有簡單的解決方法呢?如果我無法解決這個問題,我很想嘗試不添加內聯,但我寧願避免不必遵循該路線。

+0

'當它進入ObservableCollection,DateTime值仍然是01/01/0001'。好吧,預計'Convert'方法會更改datagrid中顯示的值,僅此而已。在將更改保存到數據庫檢查之前,使用'01/01/0001'值進行修改 – ASh

+0

@ASh Convert肯定沒用嗎?我想要datagrid中的值緩解到ObersableCollection。實際的問題是,當用戶選擇日期時,它將在01/01/0001啓動DatePicker,因此實際上是無用的。我已經嘗試將「DisplayDateTime」設置爲今天的日期,但它仍然從DatePicker日曆中的01/01/0001開始,再次完全沒用? – Yokomoko

+0

@Yolomoko,我想轉換器可能會工作,如果你把'CovertBack'與'Convert'中的代碼相同 – ASh

回答

2

設置你的數據對象類的DateTime屬性的默認值,即在類已設置或約束的ItemsSource財產ObservableCollection<T>TDataGrid到:

private DateTime _dateTime = DateTime.Now; //<-- default value 
public DateTime DateTime 
{ 
    get { return _dateTime; } 
    set { _dateTime = value; } 
} 
+0

感謝您的評論。我正在使用實體框架,所以我認爲我需要爲Sailing創建一個部分類。我之前沒有這樣做,所以我現在正在努力爭取這個工作,然後我會嘗試你的建議。 – Yokomoko