0

Windows Phone (c#) 用のミュージック プレーヤーを作成しています。ピボットページでアプリを開始することにしました。それらの 1 つはアルバムのリストで、リストの左側にアルバム アートがあります。プロパティを持つクラスを作成しました:

BitmapImage artwork;
Album alb;

そして、バインディング用のビューモデルクラスを作成しました:

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 を 1 つだけ使用しています。そのため、最後の 1 つしか表示されません。

BitmapImage の作成を for ループ内に移動する必要があります。

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 に答える