2017-02-20 22 views
0

Интересно, можете ли вы мне помочь. У меня есть DataGrid, где пользователь будет добавлять новые строки из DataGrid. У меня есть DatePicker, связанный с коллекцией ObersableCollection в ViewModel.Новая строка в привязке 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'. ну, как ожидается, метод «Конвертировать» изменяет значение, отображаемое в datagrid, не более того. перед тем, как сохранить изменения в проверке базы данных и сделать что-то с «01/01/0001» значениями – ASh

+0

@ASh Convert, безусловно, бесполезен? Я хочу, чтобы значение в datagrid уменьшалось до ObersableCollection. Фактическая проблема заключается в том, что, когда пользователь переходит к выбору даты, он запускает DatePicker в 01/01/0001, поэтому он фактически бесполезен. Я пробовал установить «DisplayDateTime» на сегодняшнюю дату, но он все еще начинается с 01/01/0001 в календаре DatePicker, опять же, совершенно бесполезным? – Yokomoko

+0

@Yolomoko, я полагаю, конвертер может работать, если вы введете 'CovertBack' тот же код, что и в' Convert' – ASh

ответ

2

Установленное значение по умолчанию DateTime свойства вашего класса объектов данных, т.е. в классе T из ObservableCollection<T>, что вы установили или связанные с ItemsSource свойства объектом DataGrid к:

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

Спасибо за ваш комментарий. Я использую Entity Framework, поэтому я предполагаю, что мне нужно создать частичный класс для Sailing. Я не делал этого раньше, поэтому в настоящее время я борюсь за то, чтобы это работало, и тогда я попробую ваше предложение. – Yokomoko