2012-02-08 3 views
2

I m загрузка пути изображения из изолированных настроек хранения в моем приложении.Загрузка изображения из изолированного хранилища в наблюдаемую коллекцию не работает

[DataMember] 
    public string entryImage = ""; 

    [DataMember] 
    public string EntryImage 
    { 
     get { return entryImage; } 
     set { entryImage = value; } 
    } 

Использование вспомогательного класса для хранения изображения в изолированном файле хранилища.

public static void SaveImage(Stream imageStream, string directory, string filename) 
    { 
     try 
     { 
      string path = System.IO.Path.Combine(directory, filename); 

      using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       if (!isoStore.DirectoryExists(directory)) isoStore.CreateDirectory(directory); 

       using (var writeStream = isoStore.CreateFile(path)) 
       { 
        byte[] buffer = new byte[32768]; 
        while (true) 
        { 
         int read = imageStream.Read(buffer, 0, buffer.Length); 

         if (read <= 0) 
          return; 
         writeStream.Write(buffer, 0, read); 
        } 
       } 
      } 

     } 
     // Catch exception if unable to save the image 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Вот та часть, где я хранить ImagePath к ObservableCollection

 MyDiaryItem _saveItems = new MyDiaryItem(); 
     _saveItems.EntryNotes = InputText.Text; 
     _saveItems.EntryDate = date.ToString(); 
     _saveItems.EntryImage = AppHelper.ImageDirectory + AppSettings.ImageFilename; 

Где MyDiaryItem это наблюдаемая коллекция

public ObservableCollection<MyDiaryItem> diaryItems = null; 
сохранить

Изолированное хранилище и нагрузки

  void LoadSettings() 
    { 
     if (settings.Contains("DiaryItems")) 
     { 
      diaryItems = new ObservableCollection<MyDiaryItem>((List<MyDiaryItem>)settings["DiaryItems"]); 
     } 
    } 

    void SaveSettings() 
    { 
     //settings["DiaryItems"] = diaryItems.ToList(); 
     if (diaryItems.ToList() != null) 
     { 
      settings.Clear(); 
      settings.Add("DiaryItems", diaryItems.ToList()); 
      settings.Save(); 
     } 
    } 

Вот XAML код источника

  <ListBox toolkit:TiltEffect.IsTiltEnabled="true" Name="AllEntriesList" 
        Margin="0,0,-12,0" 
        SelectionChanged="AllEntriesList_SelectionChanged"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" Margin="0,0,0,17"> 
          <Image Source="{Binding EntryImage}" Height="100" Width="100" Stretch="Fill" Margin="12,0,9,0" /> 
          <StackPanel Margin="0,0,0,17" Width="350" Height="Auto"> 
           <TextBlock Text="{Binding EntryLocation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextLargeStyle}" /> 
           <TextBlock Text="{Binding EntryNotes}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" /> 
           <TextBlock Text="{Binding EntryDate}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" /> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

изображения Я хочу некоторые, как использовать ImagePath retrived из изолированного хранилища, чтобы отобразить изображение в списке diaryitems.

Я загружаю все диариемы в моей функции OnNavigatedTo, как это.

AllEntriesList.ItemsSource = app.diaryItems;

Я вижу изображение, которое правильно заполнено в списке diaryItems. Я хочу отобразить изображение в списке diaryItems. Как это сделать ?

+1

@MyKuLLSKI - Пожалуйста, не редактируйте вопрос, чтобы сказать, что это может быть дубликат. Это то, за чем закрываются или комментируются. –

+0

@Erno - пожалуйста, покажите мне ссылку, где это правило цитируется. Спасибо – MyKuLLSKI

+0

http://meta.stackexchange.com/questions/121652/adding-possible-duplication-above-original-question –

ответ

1
<Image Source="{Binding EntryImage}" Height="100" Width="100" Stretch="Fill" Margin="12,0,9,0" /> 

Вы связываете строку с источником изображения. попробуйте связать его с BitmapSource
вы можете легко получить BitmapSource из потока. Например:

BitmapSource CreateSource(Stream stream) 
{ 
    return source = PictureDecoder.DecodeJpeg(stream); 
} 
Смежные вопросы