DateTime在Datagrid,ListView中不显示当前文化格式

时间:2010-09-02 20:28:08

标签: wpf datetime listview mvvm

在WPF中,我试图在DataGrid中绑定一个日期属性,我只能对它绑定到DateTime属性进行排序。

应用程序应以与用户的区域和语言设置相对应的格式显示日期。

问题是,当日期是string属性时,它会根据区域设置显示,但是当属性绑定到DateTime时,日期格式默认为美国而不是正确区域。

因此,如果它绑定到string属性,则按列排序不起作用,如果它绑定到DateTime属性,则它不会转换为正确的区域。

3 个答案:

答案 0 :(得分:29)

那是因为绑定系统使用了FrameworkElement.Language属性定义的文化,它不会自动匹配当前的文化(这有点愚蠢的IMO,但就像它的方式......)。 / p>

幸运的是,有一种简单的方法,您只需要覆盖应用程序静态构造函数as shown hereLanguage属性的元数据:

public partial class App : Application
{
    static App()
    {
        FrameworkElement.LanguageProperty.OverrideMetadata(
            typeof(FrameworkElement),
            new FrameworkPropertyMetadata(
                XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
    }
}

答案 1 :(得分:2)

WPF Application Framework (WAF) 本地化示例展示了如何解决您的问题。

答案 2 :(得分:0)

另一个答案(覆盖语言元数据)对我有用,但对于运行该应用程序仅一次。第二次通话将失败。我将其替换为:

var wpfLanguage = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag);
Application.Current.MainWindow.Language = wpfLanguage;