Aseem Sharma Ответов: 5

Как отобразить DatePicker в другом формате


Привет Друзья,

Я не знаком с WPF, поэтому мне нужна помощь в использовании элемента управления DatePicker WPF.

Я получаю XML-документ, в котором одним из полей является поле даты, как показано ниже:

<Students>
    <Student>
        <Name>John</Name>
        <DateOfBirth>1990-12-05</DateOfBirth>
    </Student>
    <Student>
        <Name>Mike</Name>
        <DateOfBirth>1980-05-09</DateOfBirth>
    </Student>
</Students>


Дата всегда приходит в формате "гггг-ММ-ДД". Но мне нужно отобразить дату в DatePicker в формате "dd/MM/yyyy". Кроме того, когда пользователь редактирует дату из DatePicker, мне нужно сохранить дату обратно в XML в том же формате, то есть "гггг-ММ-ДД".

Пожалуйста, дайте мне знать, как это сделать.

С уважением
Асим

5 Ответов

Рейтинг:
9

Richard MacCutchan

Используйте текст значения XML для создания DateTime[^] объект, который затем можно использовать для инициализации вашего DatePicker. При создании XML сделайте то же самое в обратном порядке.


Рейтинг:
38

Clifford Nelson

Форматирование строки для сохранения в формате XML:

String.Format("{0:yyyy-MM-dd}", dt);  


Вы должны иметь возможность переопределить свой формат по умолчанию, обновив культуру:

CultureInfo ci = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name); ci.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"; 
Thread.CurrentThread.CurrentCulture = ci; 


Затем всякий раз, когда вы выводите shortdate, это должен быть правильный формат

dt.ToShortDateString();


Установка информации о культуре должна позволить вам получить дату непосредственно из строки:

var x = DateTime.Parse("2000-12-30");


sayka

Спасибо..

Cluster.APX

Это очень хорошее решение. Спасибо

Рейтинг:
16

Wayne Gaylard

Самая лучшая идея, чтобы иметь ученика класс название и свойства DateOfBirth. Затем в вашем XAML все, что вам нужно сделать, это привязать DatePicker к свойству DOB и установить StringFormat следующим образом

<DatePicker SelectedDate="{Binding Path=DateOfBirth,StringFormat='dd/MM/yyy'}" />

Тогда у вас может быть метод Save в вашем классе Student или классе доступа к данным, который сохраняет свойство DOB в правильном формате.


jonex77

Я проверил, но это не сработало для меня.

Cluster.APX

для меня это тоже не работа.

Рейтинг:
0

Clifford Nelson

Вы должны иметь возможность переопределить свой формат по умолчанию, обновив культуру:


CultureInfo ci = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
ci.DateTimeFormat.ShortTimePattern = "HH.mm";
Thread.CurrentThread.CurrentCulture = ci;


Затем всякий раз, когда вы выводите shortdate, это должен быть правильный формат


Рейтинг:
0

lobster.vi

//
// Custom format in DateTimePicker
// Why do I love this language
// Looked at the code in reflector and came to this decision,
// which does not affect the thread culture
//
// Special thanks to google translate from Russia.
//




public class CustomLanguage : CultureInfo
  {
      public CustomLanguage()
          : base(CultureInfo.InvariantCulture.LCID, true)
      {
          this.DateTimeFormat = new DateTimeFormatInfo()
          {
//your format
              LongDatePattern = "yyyy/MM/dd",
              ShortDatePattern = "yyyy/MM/dd"
          };

// get internal ctor and create XmlLanguage 
          var mi = typeof(XmlLanguage).GetConstructor(
              System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
              null,new Type[] { typeof(string) }, null);
          Language = (XmlLanguage)mi.Invoke(new[] { "" });


// set our culture with our format
          var cu_fi = Language.GetType().GetField("_specificCulture", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
          cu_fi.SetValue(Language, this);

      }

      public XmlLanguage Language { get; private set; }

  }

<datepicker language="{Binding Path=Language,Source={StaticResource CustomLanguage}}" />