2015-03-23 4 views
0

Я скачал образ, класс и ListView с управлением Image Это класс, который я связываю с моим ListView:Как установить локальное загруженное изображение в BitmapImage?

class MagazineDownload 
    { 
     public string Title { get; set; } 
     public string Date { get; set; } 
     public BitmapImage Cover { get; set; } 
     public string Pdf { get; set; } 

     public MagazineDownload(string title, string image, string date, string pdf) 
     { 
      Title = title; 
      Cover = new BitmapImage(); 
      addImage(image); 
      Date = date; 
      Pdf = pdf; 
     } 


     private async void addImage(string image) 
     { 
      StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(image); 
      IAsyncOperation<IRandomAccessStream> operation = storageFile.OpenAsync(FileAccessMode.Read); 
      IRandomAccessStream stream = await operation; 
      Cover.SetSource(stream);  
     } 
    } 

Это код изображения связывания:

<ListView 
        Margin="19,-23,-19.167,23.333" 
        AutomationProperties.AutomationId="PivotListViewSection" 
        SelectionMode="None" 
        IsItemClickEnabled="False" 
        ItemClick="downList_ItemClick" 
        ItemsSource="{Binding}" 
        x:Uid="downList" 
        x:Name="downList" 
        > 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <Image x:Name="imageDownCover" Height="100" Width="100" Stretch="Fill" Source="{Binding Cover}"/> 

Все (название, дата , тег кнопки pdf) работает, кроме изображения.

Как это исправить?

+0

Поскольку у вас есть 'await' внутри, Cover будет установлен позже, когда будет выполнен конструктор. Вам нужно добавить 'NofityPropertyChanged', чтобы уведомить пользовательский интерфейс, что изображение загружено – Ku6opr

ответ

0

Избегайте вызывать какие-либо методы async из конструктора. Он будет установлен, но он должен уведомить пользовательский интерфейс через INotifyPropertyChanged.

Поскольку изображение является локальным файлом, вы можете использовать локальную папку uri и просто установить uri в конструкторе.

public MagazineDownload(string title, string image, string date, string pdf) 
{ 
    //don't forget the triple forward slashes 
    var uri = string.Format("ms-appdata:///local/{0}", image); 

    Title = title; 
    Cover = new BitmapImage(new Uri(uri)); 
    Date = date; 
    Pdf = pdf; 
} 

Я рекомендую настройки INotifyPropertyChanged, так как все ваши свойства являются общедоступными получить и установить, вы хотите, чтобы ваш пользовательский интерфейс для обновления, если любое из этих значений изменится. Если они не должны меняться, заставьте их иметь приватную переменную для чтения, чтобы ничто не могло их изменить.

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