【问题标题】:Formatting a date in XAML on WP7在 WP7 上用 XAML 格式化日期
【发布时间】:2011-01-14 19:27:12
【问题描述】:

有没有办法为 Windows Phone 7 使用 XAML 格式化日期?

如果尝试使用:

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

但我得到了错误:

在“绑定”类型中找不到属性“StringFormat”

【问题讨论】:

    标签: xaml windows-phone-7


    【解决方案1】:

    在 SL4 中这是可能的...

    <TextBlock Text="{Binding Date, StringFormat='MM/dd/yyyy'}}"/>
    

    ...在 SL3 中,您需要使用 IValueConverter

    public class DateTimeToStringConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return String.Format("{0:MM/dd/yyyy}", (DateTime)value);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    如果您想要更强大的方法,您可以使用ConverterParameter

        public class DateTimeToStringConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                    if (parameter == null)
                        return ((DateTime)value).ToString(culture);
                    else
                        return ((DateTime)value).ToString(parameter as string, culture);
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    

    然后在您的 XAML 中,您首先将转换器定义为资源...

    <namespace:DateTimeToStringConverter x:Key="MyDateTimeToStringConverter"/>
    

    ..然后将其与可接受的参数一起引用以格式化DateTime 值...

    <TextBlock Text="{Binding Date, 
             Converter={StaticResource MyDateTimeToStringConverter}, 
             ConverterParameter=\{0:M\}}"/>
    

    【讨论】:

    • +1 但是一些建议:包括一个用法示例,利用 ConverterParameter 传递一个替代格式字符串,为类命名更符合其功能,例如“DateTimeToStringConverter”。跨度>
    • 我强烈建议不要使用 IValueConverter。暴露您要绑定的属性时,一行 C# 代码也可以执行此转换。
    • @JustinAngel 不喜欢将这种类型的功能推送到 ViewModel,因为它是 View 特定的功能。除非这是关于方法与性能的关系,否则我无法推测转换器可能会花费如此昂贵的成本来保证将其推送到 ViewModel。
    • 由于性能影响,建议谨慎使用值转换器。特别是在列表框的上下文中注意到这一点。我很欣赏这里有相互竞争的优先事项需要平衡,这对不同的人和不同的用途会有不同的影响。有人可能会争辩说,最终在手机上采用转换器的某些用途将要求您对性能做出让步,并且可能更喜欢单一的方法。无论如何,将这两种方法都记录下来是可以的,读者可以根据自己的情况做出决定。
    【解决方案2】:

    据我所知,StringFromat 是 Silverlight 4 功能,Silverlight for Windows Phone 7.0 基本上是 Silverlight 3 + 一些附加功能。那估计不行了。

    【讨论】:

      【解决方案3】:

      这可能是您正在寻找的。 RelativeDateTimeConverter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 2011-07-31
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多