Отображение отформатированного DateTime внутри ObservableCollection - PullRequest
0 голосов
/ 06 сентября 2018

В DataGrid У меня есть 2 столбца:

public string DayName {get; set;}    
public DateTime DateTimeColumn {get; set;}

Я хочу отобразить данные, как показано ниже:

DayName   | DateTimeColumn  
Monday    | 2018-09-03 
Tuesday   | 2018-09-04 
Wednesday | 2019-09-05 
....

Для этого у меня есть метод:

public static ObservableCollection<MyDataConcept> BuildDataConceptList(int year, int month)
{
   ObservableCollection<MyDataConcept> resultList = 
                                          new ObservableCollection<MyDataConcept>();

  foreach (var data in GetDates(year, month))
  {
    if (data.DayOfWeek.ToString() != "Saturday" && data.DayOfWeek.ToString() != "Sunday")
    {
     MyDataConcept kdc = new MyDataConcept(data.DayOfWeek.ToString(), data.Date);
     resultList.Add(kdc);
    }
  }
}

У меня нет проблем, чтобы отобразить DayName = data.DayOfWeek.ToString(), только для правильно отобразить DateTimeColumn = data.Date , как сейчас: 09/03/2018 12:00:00 AM.

Я пытался конвертировать, как показано ниже:

DateTime time = DateTime.Parse(data.ToShortDateString());

или

var date = System.DateTime.ParseExact(data.ToShortDateString(), "yyyy-MM-dd", 
           CultureInfo.InvariantCulture,DateTimeStyles.None);

но это не работает.

UPDATE : Это мой XAML:

<DataGrid ItemsSource="{Binding Path=MyConceptItems}"
IsSynchronizedWithCurrentItem="True" />

1 Ответ

0 голосов
/ 06 сентября 2018

Проблема в том, что вы конвертируете DateTime в DateTime. Затем форматирование прошло. Попробуйте использовать строку:

var date = data.ToShortDateString();

Если вы действительно хотите использовать DateTime внутри DataGrid, то просто определите столбец в XAML:

<DataGridTextColumn Binding="{Binding DateTimeColumn, StringFormat=\{0:yyyy-MM-dd\}}" />

Если ваши столбцы генерируются автоматически, т. Е. У вас нет определений столбцов в XAML, то вы можете обработать событие AutoGeneratingColumn таблицы данных:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(DateTime))
    {
        e.Column = new DataGridTextColumn()
        {
            Binding = new Binding(e.PropertyName) { StringFormat = "yyyy-MM-dd" }
        };
    }
}

И в XAML:

<DataGrid ItemsSource="{Binding Path=MyConceptItems}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" IsSynchronizedWithCurrentItem="True" />
...