每个专辑艺术都是一样的

时间:2013-05-02 16:53:51

标签: windows-phone-7

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

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条件,那么Album Arts就是来自UriSource的所有图像应该如何。

我不明白为什么最后一张图片被设置为所有专辑。

1 个答案:

答案 0 :(得分:3)

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

您应该在for-loop中移动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));
    }
}