如何格式化Windows应用商店通用应用程序(W8.1 + WP8.1)中的日期?

时间:2014-04-12 12:01:51

标签: xaml windows-store-apps windows-8.1 windows-phone-8.1 win-universal-app

我正在使用可用于Windows 8.1和Windows Phone 8.1的新Windows Store Universal App模板,并且想知道如何在XAML代码中格式化字符串。

我尝试过的(XAML):

 <TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" />

问题是StringFormat中没有Windows.UI.Xaml.Controls.TextBox

Microsoft已创建sample project,这与格式化日期有关。但是那里使用的方法基于(丑陋的)代码。

所以,这是我的问题:

  • 为什么StringFormat在Windows应用商店应用中不可用?
  • 如何仅使用XAML代码格式化字符串?

<小时/> 修改 我决定使用转换器解决方案,因为这里感兴趣的是代码:

public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return null;

        if (!(value is DateTime))
            return null;

        var dateTime = (DateTime)value;

        var dateTimeFormatter = new DateTimeFormatter(YearFormat.Full,
            MonthFormat.Full,
            DayFormat.Default,
            DayOfWeekFormat.None,
            HourFormat.None,
            MinuteFormat.None,
            SecondFormat.None,
            new[] { "de-DE" },
            "DE",
            CalendarIdentifiers.Gregorian,
            ClockIdentifiers.TwentyFourHour);

        return dateTimeFormatter.Format(dateTime);
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        string language)
    {
        throw new NotImplementedException();
    }
}

我很高兴每一条建议如何改进上面的代码,随时发表评论。

感谢MikaelDúiBolinder和Martin Suchan的建议/回答。

1 个答案:

答案 0 :(得分:7)

Windows运行时项目类型中的DataBinding不支持StringFormat属性,您拥有的选项是:

  • 使用已格式化的日期作为ViewModel 中的get-only 属性。
  • 使用转换器 - 您甚至可以创建StringFormatConverter,您可以将DateTime格式传递为 ConverterParameter Here's a solution这样的StringFormatConverter如何工作。