在WPF中,我试图在DataGrid
中绑定一个日期属性,我只能对它绑定到DateTime
属性进行排序。
应用程序应以与用户的区域和语言设置相对应的格式显示日期。
问题是,当日期是string
属性时,它会根据区域设置显示,但是当属性绑定到DateTime
时,日期格式默认为美国而不是正确区域。
因此,如果它绑定到string
属性,则按列排序不起作用,如果它绑定到DateTime
属性,则它不会转换为正确的区域。
答案 0 :(得分:29)
那是因为绑定系统使用了FrameworkElement.Language
属性定义的文化,它不会自动匹配当前的文化(这有点愚蠢的IMO,但就像它的方式......)。 / p>
幸运的是,有一种简单的方法,您只需要覆盖应用程序静态构造函数as shown here中Language
属性的元数据:
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;