我正在尝试将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格式的字符串?

提前致谢!

===============>>#1 票数: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将值格式化为字符串。 如果您有很多确切的格式,我会将其放在值转换器中,否则我的值转换器将只返回一个日期时间,因为我可能会从中获得更多的重用性。

===============>>#2 票数:0

如果您的数据应该是日期/时间,则应确保它是日期/时间。 只需在反序列化Feed中添加另一步即可对其进行更正,那么这只是一个演示问题:

<TextBox Name="tbxArrivalTime" Text="{Binding Path=ArrivalTime, Format=\{0:HH:mm\}}" />

  ask by ForeverLearning translate from so

未解决问题?本站智能推荐: