DateTime输入格式?

时间:2013-08-28 02:12:44

标签: wpf datetime string-formatting

有些东西让我无法理解。只是希望有人可以帮忙。

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

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

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

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

感谢

2 个答案:

答案 0 :(得分: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)));
    }
}            

现在,应根据当前文化显示日期,因此当您以其文化格式输入日期时,不应出现验证错误。

答案 1 :(得分:0)

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

  

ConvertBack无法转换值'30 / 01/2013'(类型'String')。   BindingExpression:路径=日期;的DataItem = 'MainWindowViewModel'   (的HashCode = 19342748); target元素是'TextBox'(Name ='');目标   属性是'Text'(类型'String')   FormatException:'System.FormatException:String未被识别为   有效的DateTime。

它看起来像是使用默认转换器,它使用DateTime.Parse

以下内容失败并出现相同的异常:

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

看起来您唯一的选择就是编写自己的转换器。