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) показывает, как для решения вашей проблемы.