我有一个在XAML中的长列表选择器:
<phone:LongListSelector x:Name="listBox1" ItemsSource="{Binding ListView}" Margin="0,140,0,0">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110" />
<ColumnDefinition Width="210" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Image Height="110" Width="110" Grid.Column="0" Tap="Image_Tap" Source="{Binding profilePicURL}" Tag="{Binding username}" Margin="0,1"/>
<TextBlock Grid.Column="1" /> // blablabla
<TextBlock Grid.Column="2" /> // blablabla
<Image Grid.Column="3"/> // blablablabla
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
还有ListViewModel.cs文件
using Newtonsoft.Json;
using System;
using System.ComponentModel;
namespace MyApp
{
public class ListViewModel : INotifyPropertyChanged
{
private string _userid;
[JsonProperty(PropertyName = "userid")]
public string userid
{
get
{
return _userid;
}
set
{
if (value != _userid)
{
_userid = value;
NotifyPropertyChanged("userid");
}
}
}
private string _profilePicURL;
[JsonProperty(PropertyName = "profile_picture")]
public string profilePicURL
{
get
{
return _profilePicURL;
}
set
{
if (value != _profilePicURL)
{
_profilePicURL = value;
NotifyPropertyChanged("profilePicURL");
}
}
}
private string _username;
[JsonProperty(PropertyName = "username")]
public string username
{
get
{
return _username;
}
set
{
if (value != _username)
{
_username = value;
NotifyPropertyChanged("username");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
我从数据库中获取20条记录并展示在列表中。一切都很好,但是当我刷新列表时,应用程序会重新加载所有的图片。因为当我刷新后,应用会重新从网上加载最近的20条记录,而实际上只有1或2个新记录出现在列表的顶部,其他所有图片已经被加载过了。那么我该如何把之前的记录往下推,仅仅加载列表顶部的新记录呢?我不想再次下载所有旧的图片,应该怎样进行缓存?当然,当新纪录到来时,底部的记录会消失。