Windows Phone 7 开发积累_04

关于产生错误

“The as operator must be used with a reference type or nullable type ('System.DateTime' is a non-nullable value type) ”

 

今天写数据转换器,需要将按照时间值显示不同的时间格式字符串。 

结果在Convert里发现这么写报错。

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime time = value as DateTime;
        }

该问题是因为DateTime 为值类型,不能用引用类型或空类型。我们可以按如下方法写这段代码。

//DateTime time = value as DateTime;  这种写法就不对 因为DateTime为值类型

//DateTime time = value as DateTime? ?? _NullTime; 这种写法虽然不报错用起来也没问题,不过也不合适

DateTime time = (DateTime)value;  //这种是正确写法 多谢阿干童鞋指正

 

贴一下这个数据转换器

需求:

绑定时间为当日的 只显示“时:分”

绑定时间为当年且当日前的 显示 “月-日 时:分”

绑定时间为往年的 显示 “年份 月-日 时:分”

 

数据转换器:

  public class TimeFormatConverter:IValueConverter
    {
        private static DateTime _Now = DateTime.Now;
        private static DateTime _UndefineTime = new DateTime(0);
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            //DateTime time = value as DateTime;
            //DateTime time = value as DateTime? ?? _NullTime;
            DateTime time = (DateTime)value;
 
            if (time == _UndefineTime)
                return "绑定时间有误";
 
            int offYear = _Now.Year - time.Year;
            int offDay = _Now.Date.Subtract(time.Date).Days;
 
            if (offYear >= 1)
            {
                return string.Format("{0:yyyy-MM-dd HH:mm}", time);
            }
            else if (offDay >= 1)
            {
                return string.Format("{0:MM-dd HH:mm}", time);
            }
            else
            {
                return string.Format("{0:HH:mm}", time);
            }
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

xaml中声明集合

xmlns:Conv="clr-namespace:MyPageTabDemo.Utils.Converter"

使用

<TextBlock Text="{Binding Timestamp, Converter={StaticResource TimeFmtConverter}}" .../>
posted @ 2011-08-30 11:01  longlww  阅读(487)  评论(4)    收藏  举报