首页 > 解决方案 > UWP:MediaPlaybackItem 获取 ViewModel

问题描述

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 没有我想要的一些属性,其中的属性也是空的。

标签: c#uwpurimediaplayback

解决方案


创建 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));​
}

推荐阅读