如何将本地下载的图像设置为BitmapImage?

时间:2015-03-23 10:55:07

标签: c# windows-phone

我已经使用Image Control下载了image,class和listview 这是我绑定到listview的类:

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按钮标记)都有效。

如何解决?

1 个答案:

答案 0 :(得分:0)

避免从构造函数中调用任何异步方法。它将被设置,但它需要通过INotifyPropertyChanged通知UI。

由于图像是本地文件,您可以使用本地文件夹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,因为您的所有属性都是公共获取和设置的,如果这些值中的任何一个发生更改,您将希望更新UI。如果它们不应该改变,那么让它们有一个私有的只读后备变量,这样就没有什么可以改变它们。