Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf DateTime未在Datagrid、ListView中以currentculture格式显示_Wpf_Datetime_Listview_Mvvm - Fatal编程技术网

Wpf DateTime未在Datagrid、ListView中以currentculture格式显示

Wpf DateTime未在Datagrid、ListView中以currentculture格式显示,wpf,datetime,listview,mvvm,Wpf,Datetime,Listview,Mvvm,在WPF中,我试图在DataGrid中绑定一个日期属性,并且我只能在它绑定到DateTime属性时进行排序 应用程序应以与用户的区域和语言设置相对应的格式显示日期 问题是,当日期是字符串属性时,它根据区域设置显示,但当属性绑定到日期时间时,日期格式默认为美式,而不是正确的区域 因此,如果绑定到字符串属性,则按列排序不起作用;如果绑定到日期时间属性,则不会转换到正确的区域。这是因为绑定系统使用属性定义的区域性,而该属性不会自动匹配当前区域性(在我看来这有点傻,但事实就是这样…) 幸运的是,有一种简

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

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

问题是,当日期是
字符串
属性时,它根据区域设置显示,但当属性绑定到
日期时间
时,日期格式默认为美式,而不是正确的区域


因此,如果绑定到
字符串
属性,则按列排序不起作用;如果绑定到
日期时间
属性,则不会转换到正确的区域。

这是因为绑定系统使用属性定义的区域性,而该属性不会自动匹配当前区域性(在我看来这有点傻,但事实就是这样…)

幸运的是,有一种简单的方法可以解决这个问题,您只需要覆盖应用程序静态构造函数中
语言
属性的元数据:


本地化示例显示了如何解决您的问题。

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

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

非常感谢Thomas,这正是我所期望的解决方案。但这不是.NET Framework中的一个缺陷吗?这很有帮助,但它只让我们走到了这一步。WPF现在知道我何时使用不同的文化,如en GB,但它仍然无法识别对区域格式的更改(例如,我将我的机器上的en US更改为使用yyyy-MM-dd,但网格仍使用MM/dd/yyyy)。现在,它确实在我的WPF应用程序中正确显示了格式,即从年月日到年月日,但它删除了我需要的上午/下午时间。我会继续研究。谢谢,我肯定会研究这个问题。对于那些希望在这里找到不同解决方案的人,他们只是使用Thomas Levesque提供的答案。
var wpfLanguage = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag);
Application.Current.MainWindow.Language = wpfLanguage;