2013-08-28 99 views
2

有些事情我不能让我头脑发热。只希望有人可以请帮助。DateTime输入格式?

我有一个绑定到DateTime属性的WPF文本框,如下所示;

<TextBox Text="{Binding DOB, StringFormat='{}{0:dd/MM/yyyy}'}" /> 

如果我输入的文字'01/30/2013'正确地转换并显示为'30/01/2013'。 如果我输入'30/01/2013'文本,会引发验证错误,因为它预期INPUT的格式为MM/dd/YYYY。

如何更改输入格式? 我意识到我可以写一个自定义转换器。我只是想知道是否有另一种方式?

感谢

回答

0

运行,在调试模式下,我得到下面的转换失败:

ConvertBack不能转换值'30/01/2013' (类型 '字符串')。 BindingExpression:Path = Date; DataItem ='MainWindowViewModel' (HashCode = 19342748);目标元素是'TextBox'(Name ='');目标 属性为'文本'(类型'String') FormatException:'System.FormatException:String未被识别为 有效的DateTime。

它看起来像它使用默认的转换器,它使用沿DateTime.Parse行的东西。

下失败,出现相同的异常:

var date = DateTime.Parse("30/01/2013"); 

它看起来像你唯一的选择就是写自己的转换器。

+0

对不起,没有工作。同样的错误(注意:我假设它是同样的错误,因为我没有显示验证错误。文本框的边框是红色的) – ausgeorge

+0

如果您处于调试模式,您应该能够在输出窗口中查看转换失败。如果有帮助。 – Khan

1

试试这个把戏。添加Startup事件句柄在App.xaml文件:

<Application x:Class="YourClass.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Startup="Application_Startup" ... /> 

App.xaml.cs补充一点:

public partial class App : Application 
{ 
    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), 
      new FrameworkPropertyMetadata(System.Windows.Markup.XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag))); 
    } 
}    

现在,应该根据当前的文化显示的日期,所以当你输入一个日期的格式他们的文化,验证错误不应该出现。