WPF - 具有 xpath 绑定的转换器获取值被截断
WPF - Converter with xpath binding get value truncated
我有一个带有字符串日期 xpath 绑定的 WPF 文本框:
<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 将日期格式化为 "readable" 格式,我还需要时间 "converted" 到本地时区,所以我做了一个转换器:
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:
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()',
Converter={StaticResource DateTimeToLocalTimezoneConverter}}" />
运行 代码,在我的 window 中,我看到一个空的文本框。在 Convert 方法中添加一个断点我可以看到该值被截断并且 TryParseExact return 在解析日期时为 false。
在值参数中我可以看到这个:
2017-02-27T17:06:06
怎么了?
任何帮助将不胜感激。
您应该能够将 DateTime.TryParse
方法与 CultureInfo.InvariantCulture
和 DateTimeStyles.AdjustToUniversal
一起使用:
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
return String.Format("{0:f}", valueDate.ToString(currentCulture));
}
工作示例代码:
CultureInfo currentCulture = CultureInfo.CurrentCulture;
string date = "2016-06-13 22:00:00.000+0000";
DateTime valueDate;
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
string s = String.Format("{0:f}", valueDate.ToString(currentCulture));
}
我有一个带有字符串日期 xpath 绑定的 WPF 文本框:
<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 将日期格式化为 "readable" 格式,我还需要时间 "converted" 到本地时区,所以我做了一个转换器:
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:
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()',
Converter={StaticResource DateTimeToLocalTimezoneConverter}}" />
运行 代码,在我的 window 中,我看到一个空的文本框。在 Convert 方法中添加一个断点我可以看到该值被截断并且 TryParseExact return 在解析日期时为 false。 在值参数中我可以看到这个:
2017-02-27T17:06:06
怎么了? 任何帮助将不胜感激。
您应该能够将 DateTime.TryParse
方法与 CultureInfo.InvariantCulture
和 DateTimeStyles.AdjustToUniversal
一起使用:
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
return String.Format("{0:f}", valueDate.ToString(currentCulture));
}
工作示例代码:
CultureInfo currentCulture = CultureInfo.CurrentCulture;
string date = "2016-06-13 22:00:00.000+0000";
DateTime valueDate;
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
string s = String.Format("{0:f}", valueDate.ToString(currentCulture));
}