有些东西让我无法理解。只是希望有人可以帮忙。
我有一个绑定到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。
如何更改输入格式? 我意识到我可以编写自定义转换器。我只是想知道是否有另一种方式?
感谢
答案 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");
看起来您唯一的选择就是编写自己的转换器。