DatePicker绑定到DateTime。 “字符串未被识别为有效的DateTime”

时间:2012-04-20 13:59:41

标签: wpf datepicker

(免责声明:此异常已在众多其他主题中报告过,是的,我用Google搜索,试图找到我的问题的解决方案!!)

我有一个WPF应用程序, WPF Toolkit DatePicker 控件绑定到DateTime变量:

<UserControl x:Class="MikesApp.View.UserControls.FXRatesUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:toolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">

 <toolkit:DatePicker x:Name="fxDate" VerticalAlignment="Center" 
         Text="{Binding Selected_FXRate_Date, Mode=TwoWay}" 
         Style="{DynamicResource DatePickerStyle1}" >
 </toolkit:DatePicker>

每当我输入日期时,例如4/20/2012,DatePicker控件似乎认为它实际上是英国日期格式(dd / MM / yyyy),而WPFtoolkit源代码会抛出“”的异常字符串未被识别为有效的DateTime 。“

这突然停止了WPF向应用程序的其他部分执行更改通知的任何机会,这需要知道此日期何时更改。

Screenshot of VS2010 exception

我很困惑。

我的笔记本电脑设置为以MM / dd / yyyy的形式显示日期,我特意尝试告诉我的应用使用此美国日期格式,首先使用此代码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "MMM-dd-yyyy";
Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern = "MMM-dd-yyyy  hh:mm:ss";   

然后,出于绝望,使用此代码:

CultureInfo ci = new CultureInfo("en-US");
ci.DateTimeFormat.SetAllDateTimePatterns(new string[] { "MM/dd/yyyy" }, 'd' );
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

但无论我尝试什么,每当我选择无法使用dd / MMM / yyyy解析的日期时,DatePicker都会抛出异常。

如果我查看抛出异常的代码行(取自WPF Toolkit SDK中的DatePicker.cs):

newSelectedDate = DateTime.Parse(text, DateTimeHelper.GetDateFormat(DateTimeHelper.GetCulture(this)));

..我发现“ DateTimeHelper.GetCulture(this)”确实正确返回“en-US”,但是 GetDateFormat 函数正在获取错误日期格式。它以某种方式返回dd / MMM / yyyy,而不是MMM / dd / yyyy。

GetDateFormat's return values

我真的很困惑。

我甚至尝试将 GetDateFormat 函数(取自WPFtoolkit源代码中的以下路径)切换到我的应用程序中,并试图让它重现“错误的日期”格式“问题...但是当它在我的代码中时,运行正常,并且每次都正确解析MMM / dd / yyyy日期。

WPFtoolkit \日历\微软\的Windows \控制\ DateTimeHelper.cs

为什么WPFtoolkit代码与我的WPF应用程序的代码有不同的文化?

我怎样才能让WPFtoolkit使用正确的文化?

1 个答案:

答案 0 :(得分:0)

我知道这不是一个直接的答案,但为了防止它有帮助,您是否可以访问telerik工具?他们的RadDateTimePicker具有您可以设置/强制执行的文化依赖属性(类型为CultureInfo):

<telerik:RadDateTimePicker x:Name="fxDate" VerticalAlignment="Center" 
     Culture ="{Binding Culture}"
     Text="{Binding Selected_FXRate_Date, Mode=TwoWay}" 
     Style="{DynamicResource DatePickerStyle1}" >

此外,我很确定你会说“当然不是”,但为了以防万一,你是否正在做一些事情,比如重写你的DatePickerStyle1中可能抛出TemplateBinding的模板?