我正在制作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的所有图像应该如何。
我不明白为什么最后一张图片被设置为所有专辑。
答案 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));
}
}