DateTime未在Datagrid,ListView中以当前区域性格式显示

问题描述 投票:14回答:3

在WPF中,我试图将日期属性绑定到DataGrid中,并且只有绑定到DateTime属性时,我才能进行排序。

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

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

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

wpf datetime listview mvvm
3个回答
29
投票

这是因为绑定系统使用由FrameworkElement.Language属性定义的区域性,该区域性不会自动匹配当前区域性(这是一个愚蠢的IMO,但这是这样的方式。)。]

幸运的是,有一个简单的解决方法,您只需要在应用程序静态构造函数FrameworkElement.Language中覆盖Language属性的元数据,就可以了]

as shown here

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

本地化
示例显示了如何解决您的问题。
另一个答案(覆盖语言元数据)对我有用,但对于运行该应用程序仅一次。第二次通话将失败。我将其替换为:

WPF Application Framework (WAF)


2
投票

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


0
投票
另一个答案(覆盖语言元数据)对我有用,但对于运行该应用程序仅一次。第二次通话将失败。我将其替换为:
© www.soinside.com 2019 - 2024. All rights reserved.