我尝试将JSON Feed绑定到类以在XAML表中显示。所有这些都有效。但是,我遇到的一个问题是将DateTime值(以字符串形式输入)转换为不同的格式。
例如,JSON将其提供为:" 2014-04-20T02:57:00Z"。我想将其转换为"HH:mm"
格式。
public String ArrivalTime
{
get
{
DateTime dt = DateTime.Parse(ArrivalTime);
string test = String.Format("{HH:mm}", dt);
return test;
}
set
{
}
}
我不太熟悉访问者,我很确定我做错了,但我希望在正确的轨道上?如何将传入的DateTime字符串动态转换为新的DateTime格式化字符串?
提前致谢!
答案 0 :(得分:1)
“WPF”方式是让视图转换它。您可以使用IValueConverter接口将数据转换为您希望如何显示它。
您需要将逻辑输入到日期时间应该是多少。这是我的猜测。我不知道你怎么能转换回来只是你有时间而不是整个约会时间。此外,MarkupExtension不是必需的,它只是一个不错的选择。有关详细信息,请参阅http://wpftutorial.net/ValueConverters.html。
public class JSONDateToDate : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var jSONDate = parameter as string;
if (!string.IsNullOrEmpty(jSONDate))
{
DateTime dt;
if DateTime.TryParse(jSONDate, out dt)
{
return dt;
}
}
// If didn't pass in string or TryParse failed return back empty datetime
return new DateTime();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
// Not needed just nice
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
在你的XAML中,你会像
一样使用它<TextBox Name="tbxArrivalTime" Text="{Binding Path=ArrivalTime, StringFormat=" \{0:HH:mm\}". Converter={x:JSONDateToDate } />
只是一句警告我没有测试所有这些代码,它可能在XAML中有一些小问题,因为如果没有实际连接所有内容,很难打字。
根据获取日期字符串而不是数字来更新我的答案。您可以在IValueConverter中返回格式化的字符串,也可以返回日期时间。如果返回日期时间,则使用stringformat将值格式化为字符串。如果你有很多地方的确切格式我会把它放在值转换器中,否则我会让我的值转换器返回一个日期时间,因为我可能会更多地重用它。
答案 1 :(得分:0)
如果你的数据应该是一个日期/时间,你应该确保它是。只需在您的Feed的反序列化中添加另一个步骤来更正它,然后它只是一个演示问题:
<TextBox Name="tbxArrivalTime" Text="{Binding Path=ArrivalTime, Format=\{0:HH:mm\}}" />