我有一个WPF的TextBox使用XPath字符串日期的结合:WPF - 转换器使用XPath结合GET值截断
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()'}" />
当应用程序运行时我看到这样一个值:
2016-06-13 22:00:00.000+0000
我需要有日期在“可读的”格式进行格式化,根据机器的CultureInfo和我还需要时间“转换”为本地时区,所以我提出的转换器:
using System;
using System.Globalization;
namespace MyNamespace.Converter.General
{
class DateTimeToLocalTimezoneConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string dateFormat = "yyyy-MM-dd'T'HH:mm:ss.fffzzz";
CultureInfo currentCulture = CultureInfo.CurrentCulture;
var date = value as string;
DateTime valueDate;
if (DateTime.TryParseExact(date, dateFormat, currentCulture, DateTimeStyles.None, out valueDate))
{
return String.Format("{0:f}", valueDate.ToString(currentCulture));
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
在XAML我已经添加静态资源声明,我已经修改了文本框是这样的:
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()',
Converter={StaticResource DateTimeToLocalTimezoneConverter}}" />
运行代码,在我的窗口我看到一个空文本框。在Convert方法中添加一个断点我可以看到该值被截断,TryParseExact在解析日期时返回false。 在价值参数我可以看到这个:
2017-02-27T17:06:06
怎么了? 任何帮助,将不胜感激。
貌似['DateTime.TryParseExact'失败(HTTPS: //msdn.microsoft.com/en-us/library/system.datetime.tryparseexact%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)来解析你给它的字符串。当你说*“我可以看到价值被截断”*,你能更准确地沟通你的意思吗?什么是确切的截断值?哪一行截断它?很难说为什么一个方法在不知道传入参数的情况下失败了。 –
值参数为'2017-02-27T17:06:06',但实际值为'2016-06-13 22:00:00:00.000+ 0000',正如我在文章开头提到的那样 –
看起来你正在告诉它期望'...... HH:mm:ss.fffzzz'并且只给它...... ...... HH:mm:ss'。你无法确定它在哪里或如何被截断?或者,“实际值”是指在运行时对'Convert()'的'value'参数的实际字符串值以外的内容吗? –