我正在使用DatePicker来显示给定类的DateOfBirth属性:
<DatePicker Text="{Binding SelectedPerson.DateOfBirth }" />
我可以从基础类(SelectedPerson)看到日期是正确的(即日,月和年是正确的),但在DatePicker中,日期和月份相反。
因此,2016年2月1日,在DatePicker上显示为2016年1月2日。
我做错了什么? 提前谢谢。
答案 0 :(得分:1)
我很简单地绑定了错误的元素。应该是SelectedDate,而不是Text:
<DatePicker SelectedDate="{Binding SelectedPerson.DateOfBirth}" />
答案 1 :(得分:0)
在WPF中,任何不明确指定文化的绑定都将使用不变文化。这意味着您将获得美国日期和数字格式,而忽略您当前的区域设置。
这是一个长期存在的问题,WPF团队认为这是设计&#34;。
standard workaround将覆盖FrameworkElement
Language
媒体资源的属性元数据:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
这需要在显示任何UI之前完成 - 通常在OnStartup
事件中。
不幸的是,这只会解决从FrameworkElement
派生的元素的问题。例如,Run
元素来自FrameworkContentElement
,因此不会受到此更改的影响。并且您无法覆盖FrameworkContentElement
的元数据,因为它已被覆盖。
另一种方法是创建和使用自定义绑定,始终将文化初始化为CultureInfo.CurrentCulture
:
public class CultureBinding : System.Windows.Data.Binding
{
public CultureBinding(string path) : base(path)
{
ConverterCulture = CultureInfo.CurrentCulture;
}
public CultureBinding()
{
ConverterCulture = CultureInfo.CurrentCulture;
}
}
答案 2 :(得分:-1)