Как связать изображения, расположенные в изолированном хранилище - PullRequest
3 голосов
/ 23 июля 2011

Мне нужно связать изображения, расположенные в изолированном хранилище - я нашел здесь один ответ, и, похоже, моя ситуация
Связывание изображения в изолированном хранилище

Но затем этот человек переключился надругое решение и использовал ClientBin для хранения изображений.Мои картины будут все время отличаться.Теперь я использую изображения с сервера, но мне нужно сохранить их в изолированном хранилище и привязать к коду listBox в XAML:

Image Width="110" CacheMode="BitmapCache" Source="{Binding ThumbURL}"

код позади:

public string ThumbURL
    {
        get
        {
            return String.Format("http://localhost:3041/Pictures/thumbs/{0}.jpg", _ID);
        }
        set
        {
            this.OnThumbURLChanging(value);
            this._ThumbURL = value;
            this.OnThumbURLChanged();
            this.OnPropertyChanged("ThumbURL");
        }
    }

Может кто-нибудь посоветовать мне, как это сделать?Я буду очень, очень благодарен.

Пожалуйста, отправьте пример кода.

1 Ответ

3 голосов
/ 23 июля 2011

Чтобы загрузить изображения из Интернета, см. Этот предыдущий вопрос SO - как можно загрузить и сохранить изображения из Интернета .

Разница с привязкой изображения в изолированном хранилище заключается в том, что вам необходимо привязать объект BitmapImage, который вы инициализируете из объекта связанного кода. Я переименовал вашу собственность в «ThumbImage» из «ThumbURL», чтобы показать разницу.

Итак, в XAML:

Image Width="110" CacheMode="BitmapCache" Source="{Binding ThumbImage}"

И в вашем связанном объекте - при условии, что это изображение не изменяется - если это произойдет, вам придется соответствующим образом вызвать событие измененного свойства. (код отредактирован для решения проблемы сериализации классов).

private string _thumbFileName;
public string ThumbFileName
{
    get
    {
        return _thumbFileName;
    }
    set
    {
        _thumbFileName = value;
        OnNotifyChanged("ThumbFileName");
        OnNotifyChanged("ThumbImage");
    }
}

[IgnoreDataMember]
public BitmapImage ThumbImage 
{ 
    get 
    { 
        BitmapImage image = new BitmapImage();                    
        IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
        string isoFilename = ThumbFileName;
        var stream = isoStore.OpenFile(isoFilename, System.IO.FileMode.Open);
        image.SetSource(stream);
        return image;
    }     
}

public event PropertyChangedEventHandler PropertyChanged;

private void OnNotifyChanged(string propertyChanged)
{
    var eventHander = PropertyChanged;
    if (eventHander != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyChanged));
    }
}

(Отредактировано, чтобы добавить ссылку на загрузку изображения в первую очередь)

...