DateTime Не отображается с текущим форматом в Datagrid, ListView
В WPF я пытаюсь привязать свойство даты в DataGrid
и я могу сортировать, только если он привязан к свойству DateTime
.
Приложение должно показывать дату в формате, соответствующем пользовательскому региону и языковым настройкам.
Проблема заключается в том, что когда дата является string
свойством, она отображается в соответствии с настройками региона, но когда свойство привязано к DateTime
формат даты по умолчанию является американским, а не правильным регионом.
Так что, если он привязан к свойству string
сортировка по столбцу не работает, а если он связан со свойством DateTime
, он не будет преобразован в правильный регион.
Ответы
Ответ 1
Это потому, что система привязки использует культуру, определенную свойством FrameworkElement.Language
, которая автоматически не соответствует текущей культуре (которая немного глупый ИМО, но так, как это...).
К счастью, существует простой способ обойти его, вам просто нужно переопределить метаданные для свойства Language
в статическом конструкторе приложения, как показано здесь:
public partial class App : Application
{
static App()
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
}
Ответ 2
Пример Локализация WPF Application Framework (WAF) показывает, как для решения вашей проблемы.