0

我正在为 Windows Phone (c#) 制作音乐播放器。我决定使用 Pivot-Pages 启动应用程序。其中之一是专辑列表,列表左侧有专辑封面。我创建了一个具有以下属性的类:

BitmapImage artwork;
Album alb;

我为绑定制作了一个viewmodelclass:

ObservableCollection<ViewModelHelper.AlbumHelper> albums = new ObservableCollection<ViewModelHelper.AlbumHelper>();

    public ObservableCollection<ViewModelHelper.AlbumHelper> Albums
    {
        get { return albums; }
    }

    public AlbenViewModel()
    {
        LoadAlbums();
    }

    public void LoadAlbums()
    {
        using (MediaLibrary mediaLib = new MediaLibrary())
        {
            BitmapImage bmp = new BitmapImage();

            foreach (Album alb in mediaLib.Albums)
            {
                if (alb.HasArt == true)
                {
                    bmp.SetSource(alb.GetAlbumArt());
                    albums.Add(new ViewModelHelper.AlbumHelper(bmp, alb));
                }
                else
                {
                    bmp.UriSource = new Uri("/Gesture-Music-Player;component/Images/noArtwork.png", UriKind.Relative);
                    albums.Add(new ViewModelHelper.AlbumHelper(bmp, alb));
                }
            }
        }
    }

当我执行此操作时,专辑艺术都是一样的(这是我收藏中最后一张专辑的专辑艺术)。如果我删除 if 条件,专辑艺术就是来自 UriSource 的所有图像,它应该是怎样的。

我不明白为什么最后一张图片设置为所有相册。

4

1 回答 1

3

您只使用了一个 BitmapImage,您随后每次都会覆盖它。这就是为什么你只看到最后一个。

您应该在 for 循环中移动 BitmapImage 的创建:

foreach (Album alb in mediaLib.Albums)
{
    BitmapImage bmp = new BitmapImage();
    if (alb.HasArt == true)
    {
        bmp.SetSource(alb.GetAlbumArt());
        albums.Add(new ViewModelHelper.AlbumHelper(bmp, alb));
    }
    else
    {
        bmp.UriSource = new Uri("/Gesture-Music-Player;component/Images/noArtwork.png", UriKind.Relative);
        albums.Add(new ViewModelHelper.AlbumHelper(bmp, alb));
    }
}
于 2013-05-02T17:46:03.177 回答