您的位置:首页 > 理论基础 > 计算机网络

LongListSelector的Item里使用Image加载网络图片必须注意的问题

2014-01-03 15:55 330 查看
当一个列表的Item数很多时,为了效率与节省资源,我们不得不使用LongListSelector,它只保存了当前可见Item数的UI内存,当列表滑动时,比如Item1的位置滑动后显示的是Item10,它直接把Item1对应UI控件的DataContext从Item1直接变成tem10,也就是说UI控件依然是Item1的UI控件,避免了重新创建UI控件的资源开销。

假如ItemTemplate里用到了Image,然后将它的Source绑定到Item的ImageUrl属性,让它自动加载网络图片,这是常用做法,不会有什么问题。

但是,如果你还给这个Image注册了事件的话,比如你想注册ImageFailed事件在加载失败时显示本地的一张加载失败图片,问题就来了,你会发现各种图片错乱事件,应该加载正常的图片却显示了加载失败图片等……。原因就是列表滚动时Image的DataContext已经变化了,比如Item1的Image加载失败响应事件ImageFailed时,实际它的DataContext已经是Item10,你在事件里把Image显示加载失败图片时,实际是显示在了当前的Item10的Image上,就造成了图片错乱事件。

所以只能避免使用注册事件来显示加载失败图片,比如多放一个Image2在相同位置显示加载失败图片,在Image加载网络图片成功时显示在了Image2的前面,看起来像是Image2从加载失败图片变成了网络图片。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐