2014-01-11 3 views
1

На MainPage ListBoxWindows Phone 8 Изображение не обновляют (ListBox с Binding)

DataTemplate

<StackPanel> 
<Image Source="{Binding Image}" Height="160"></Image> 
<TextBlock Text="{Binding DisplayName}" /> 
</StackPanel> 

Binding

System.Diagnostics.Debug.WriteLine("Refresh()"); 
ListBox.DataContext = db.Contacts.OrderBy(x => x.Order).ToList(); 

Изображение Связывание

public ImageSource Image 
{ 
    get 
    { 
     string path = ApplicationData.Current.LocalFolder.Path + "Image"; 
     if (System.IO.File.Exists(path)) 
     { 
      System.IO.FileInfo fi = new System.IO.FileInfo(path); 
      System.Diagnostics.Debug.WriteLine("size: {0} time: {1}", fi.Length, fi.CreationTime); 
      return new BitmapImage(path); 
     } 
     var image = new BitmapImage(); 
     image.SetSource(Application.GetResourceStream(new Uri("Assets/Images/empty.png", UriKind.Relative)).Stream); 

     return image; 
    } 

От MainPage open SettingPage.

В SettingPage

  • изменение отображаемое_имя

  • добавлять и удалять элементы из db.Contacts

  • ApplicationData.Current.LocalFolder.Path + "Image" заменен новый файл изображения;

Вернуться на главную

  • отображаемое_имя - обновить новые элементы

  • - добавил

  • удаленные элементы - удалены

но изображение показать OLD

Если перезапуск приложения - показать новый образ

В диагностическом

Start MainPage

Refresh()

Размер: 96005 время: 11.01.2014 20:38:10

Open SettingPage - Изменение изображения - Вернуться на главную

Refresh()

Размер: 132404 время: 11.01.2014 21:05:00

Я вижу изображение имеет новый размер, но в окне списка старого изображения.

Почему изображение не обновляется?

+2

Вы должны реализовать INotifyPropertyChanged –

+0

На Refresh/Bind полной коллекции загружаются из БД/DataContext. ListBox читает свойство Image и получает новое значение, но показывает старое. Когда вызывается PropertyChanged? Файл из свойства изображения изменен в athother Page –

+0

Вы пытались вместо привязки ImageSource к строке, содержащей URL-адрес изображения, или с помощью свойства ListBox.ItemsSource для установки источника элементов? –

ответ

1

Found the solution here

var img = new BitmapImage(); 
img.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
img.UriSource = new Uri(path); 
+0

Это также сработало для загрузки растровых изображений из источника изображения api. Когда я загрузил «новое» изображение из api url (который перенаправляется для предоставления нового реального URL-адреса), ОС кэширует исходное изображение, и поэтому новый не показывался, установив IgnoreImageCache, показывает новое изображение. благодаря – o0rebelious0o

Смежные вопросы