1

私のMediaPlaybackList.ShuffledItems中には10個のアイテムがあります。Musicしかし、uri を使用して項目を ViewModel のリスト (私の場合は ) に変換しようとしたときに、 null が返されました。

何故ですか?ローカル ドライブからファイルをロードしたためでしょうか。

これは私がuriを取得する方法です:

    public static async Task<List<Music>> GetRealPlayList()
    {
        if (PlayList.ShuffleEnabled)
        {
            if (ShuffledPlayList.Count == 0)
            {
                foreach (var music in PlayList.ShuffledItems)
                {
                    ShuffledPlayList.Add(await Music.GetMusic(music.Source.Uri.AbsolutePath));
                }
            }
            return ShuffledPlayList;
        }
        else
            return CurrentPlayList;
    }

これは私がアイテムを設定する方法です:

    public static async Task SetPlayList(IEnumerable<Music> playlist)
    {
        if (Helper.SamePlayList(playlist, CurrentPlayList)) return;
        PlayList.Items.Clear();
        CurrentPlayList.Clear();
        foreach (var music in playlist)
        {
            var item = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(await Helper.CurrentFolder.GetFileAsync(music.GetShortPath())));
            PlayList.Items.Add(item);
            CurrentPlayList.Add(music);
        }
    }

MediaPlackBackItemバックをViewModelに変換するには、他にどのような方法がありますか? GetDisplayProperties().MusicProperties には、必要ないくつかのプロパティがなく、その中のプロパティも空です。

4

1 に答える 1

0

MediaSource を作成するときに、CustomPropertiesを設定してファイル パスを保存できます。また、ループするときにPlayList.ShuffledItems、CustomProperties からファイル パスを取得します。

以下の項目を設定します。

MediaSource source = MediaSource.CreateFromStorageFile(await Helper.CurrentFolder.GetFileAsync(music.GetShortPath()));
source.CustomProperties.Add("Path", file.Path);
var item = new MediaPlaybackItem(source);

音楽クラスを取得:

foreach (var music in PlayList.ShuffledItems)
{​
    MediaSource source = music.Source;​
    String path = sour.CustomProperties["Path"].ToString();​
    ShuffledPlayList.Add(await Music.GetMusic(path));​
}
于 2019-08-26T10:21:33.640 に答える