Member 9956700 Ответов: 2

Выбор даты в WPF не отражает даты выше 12-го числа в месяце


У меня есть страница WPF xaml, где я пытаюсь изменить значение даты.

<DatePicker  HorizontalAlignment="Left" Height="25" Margin="300,460,0,0" VerticalAlignment="Top" Width="250" Text="{Binding SelectedProduct.DateApplication, Mode=TwoWay}"  />


Я использовал элемент управления datepicker. Когда я пытаюсь сохранить значение в базе данных, которое больше 12/02/2019, оно не вставляется и не сохраняется. Но даты, которые находятся ниже 12/02/2019, сохраняются и обновляются в базе данных.

Может ли кто - нибудь помочь мне в этом?

Что я уже пробовал:

код XAML:

<DatePicker  HorizontalAlignment="Left" Height="25" Margin="300,460,0,0" VerticalAlignment="Top" Width="250" Text="{Binding SelectedProduct.DateApplication, Mode=TwoWay}"  />





Модальный:

public DateTime? DateApplication
     {
         get;
         set;
     }



метод validate:

private void Validate(object obj)
       {
           try
           {
               ProduitClient Product = obj as ProduitClient;

               if (IsEditMode)
               {
                   //update the product

                   editWindow.Close();
               }

2 Ответов

Рейтинг:
11

Richard Deeming

Цитата:
<DatePicker ... Text="{Binding SelectedProduct.DateApplication, Mode=TwoWay}"  />

Вы связываете выбор даты Text собственность[^]. Вам нужно связать то SelectedDate собственность[^] вместо.
<DatePicker ... SelectedDate="{Binding SelectedProduct.DateApplication, Mode=TwoWay}"  />

Когда вы привязываетесь к Text собственность, ваша DateTime значение преобразуется в строку с использованием текущих параметров культуры. Затем привязка WPF использует американская английская культура чтобы попытаться преобразовать эту строку обратно в a DateTime.

Эта "особенность" привязки WPF - которую многие хотели бы (правильно) спорить - это на самом деле ошибка, которая существует уже более десяти лет:
Привязки WPF и форматирование CurrentCulture - Веб-журнал Рика Штрала[^]
Обязательность по отношению к текущей культуре[^]


Maciej Los

Ястребиный глаз!

Member 9956700

Да.. Ястребиный глаз...!!!1 Спасибо

Рейтинг:
0

lmoelleb

Одна из сложностей дат связана с тем, как они пишутся в разных регионах мира. Скорее всего, что - то принимает дату как ММ/ДД/гггг, в то время как вы ожидаете, что это будет ДД/ММ/гггг-или наоборот.

Отладьте модель по мере установки значения - установлено ли оно так, как вы ожидаете (не просто смотрите на строку, проверьте фактические значения месяца и дня, чтобы быть уверенным).

Проверьте, как вы взаимодействуете с базой данных. Всегда используйте тип, связанный с датой, где это возможно. Избегайте строк. Поэтому обновите/вставьте с помощью параметризованных запросов (что вы все равно должны сделать) и используйте тип .net DateTime или DateTimeOffset. Рассмотрите - и протестируйте - как часовые пояса и переход на летнее и зимнее время повлияют на ваши данные.

Если вам нужно использовать строку для чего-либо, кроме отображения пользователю, всегда используйте yyyy-MM-dd (ISO 8601)


TheRealSteveJudge

Хорошее объяснение! 5*

Member 9956700

Спасибо за ответ, но я взял Datetime, когда я дебютирую код, я вижу-если я выбираю даты от 1 до 12 в datepicker, то он работает, как и ожидалось, но когда я пытаюсь выбрать даты как 13 февраля, он не позволяет.Значит, во время выполнения мой Datepicker показывает Красное поле. Как проверка. Но я не использовал никакого подтверждения.

lmoelleb

Пожалуйста, обновите свой вопрос с помощью этой информации и как можно более подробно (что именно вы видите после отладки вашей модели, если устанавливаете, например, 01/02/2020), какие региональные настройки вы используете. И из того, что вы здесь пишете, это не имеет никакого отношения к базе данных? Поэтому удалите часть о вставке/сохранении в базу данных, это просто сделает вопрос менее ясным.

Member 9956700

Моя модель обновляется только тогда, когда даты находятся в диапазоне от 1 до 12 для конкретного месяца. В противном случае он не отражается. Вы можете удалить вставку/обновление, потому что если значения модели приходят правильно - она будет обновлять /вставлять.

Member 9956700

На самом деле я вижу - проблема только с выбором даты. Когда я пытаюсь выбрать даты от 13 до 31 ... этого не происходит.