在WPF中,我试图将日期属性绑定到DataGrid
中,并且只有绑定到DateTime
属性时,我才能进行排序。
应用程序应以与用户的地区和语言设置相对应的格式显示日期。
问题是,当日期是string
属性时,它将根据“区域”设置显示,但是当该属性绑定到DateTime
时,日期格式默认为美国而不是正确的区域。
因此,如果绑定到string
属性,则按列排序不起作用,并且如果绑定到DateTime
属性,则不会转换为正确的区域。
这是因为绑定系统使用由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)));
}
}
的
本地化示例显示了如何解决您的问题。
[[public partial class App : Application
{
static App()
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
}
另一个答案(覆盖语言元数据)对我有用,但对于运行该应用程序仅一次。第二次通话将失败。我将其替换为: