Совместимость формата даты и времени настольного приложения с Win10 - PullRequest
0 голосов
/ 16 мая 2019

У меня есть приложение WPF, и я использую инфраструктуру MVVM. В моей модели представления у меня есть установщик даты и времени, который проверяет, изменилось ли значение переменной, и если да, устанавливает новое значение для переменной.

Моя проблема заключается в том, что значение даты и времени, если оно неверно, вводится каждый раз в сеттер.

Например: значение даты и времени - 11 января 2019

По первоначальному заданному значению оно равно 11 января 2019 года, но при последующем запуске оно стало 1 ноября 2019 года, а при следующем запуске - до 11 января 2019 года и т. Д. И далее.

Таким образом, возникает исключение StackMemoryException из-за бесконечного зацикливания в функции установки.

Я попытался добавить оператор if для проверки идентификатора: старое и новое значение совпадают, но проблема в том, что значение установщика всегда переключается с января на ноябрь.

Я пытался разобрать дату в том же формате.

public DateTime? ActionDate
{
    get { return actionDate; }
    set
    {
       if (value.HasValue && !actionDate.HasValue)
       {
            actionDate = value;
            OnPropertyChanged("ActionDate");
       }
       else if (value.HasValue && actionDate.HasValue && actionDate.Value.Date.ToString("MM/dd/yyyy") != value.Value.Date.ToString("MM/dd/yyyy"))
        {
            actionDate = value;
            OnPropertyChanged("ActionDate");
         }
      }
}

Я также попытался запустить приложение на компьютере с ОС Windows 7, и оно работает нормально. Любые предложения будут полезны.

Спасибо

Редактировать: я уже решил эту проблему. Проблема заключалась в теге Datepicker в моем xaml. Я связываю значение модели как с атрибутом SelectedDate, так и с атрибутом Text в средстве выбора даты, поэтому сеттер был вызван дважды и установлена ​​неправильная дата. Я просто удаляю привязку текста из DatePicker в файле xaml.

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Я думаю, что формат отображения, в котором вы отображаете, необходимо исправить. Что касается установки значения, если значение отличается от ранее установленного значения. Вы можете использовать эту логику: -

public DateTime? ActionDate
    {
    get { return actionDate; }
    set
    {
    if (value.HasValue && value.CompareTo(actionDate)!=0)
        actionDate = value;
   OnPropertyChanged("ActionDate");
    } 
0 голосов
/ 16 мая 2019

Я думаю, что ваша проблема связана с форматом строки.

https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

  //For the date January 11, 2019, 
  actionDate.Value.Date.ToString("MM/dd/yyyy")
  this will return November 1, 2019. 

  dd => day
  MM => month
  yyyy => year 
  HH => hour (24 hours)
  hh => hour (12 hours)
  mm => minute
  ss => second
  here is an exemple for January 11, 2019

  //you can use 

  actionDate.Value.Date.ToString("dd/MM/yyyy");
  //or
  string.Format("{0:dd-MM-yyyy}", actionDate.Value.Date); // => 11-01-2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...