Кэш изображений с длинным списком Windows Phone 8

#c# #image #xaml #windows-phone-8 #longlistselector

#c# #изображение #xaml #windows-phone-8 #longlistselector

Вопрос:

У меня есть longlistselector в 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 записей из Интернета, и, возможно, в верхней части этого списка 20 слотов есть 1 или 2 новые записи, а все остальные изображения уже загружены. Итак, как я могу просто «нажать» старые и загружать ТОЛЬКО новые записи сверху. Я не хочу снова загружать все старые изображения. Как я могу его кэшировать? Конечно, записи внизу исчезнут, когда новые записи появятся сверху.

Ответ №1:

Сохраните изображения в изолированной папке хранения. Загрузите изображения в list из этой папки. Теперь, когда необходимо добавить новые изображения, сохраните их в той же папке и удалите те, которые больше не нужны.

Таким образом, изображения будут кэшироваться, даже если пользователь закроет приложение, а затем снова откроет его, сохраняя данные и для пользователя.