我正在尝试在wp中开发音乐播放器应用程序。 现在,我可以从MediaLibrary中检索歌曲列表并将其添加到列表框中。
MediaLibrary lib = new MediaLibrary();
var SongName = (from m in lib.Songs select m.Name).ToList();
listBox1.ItemsSource = SongName;
列表正在填充,我正在使用事件
访问ListBox项目listBox1_SelectionChanged
我希望将所选项目转换为Song类型,以便我可以使用MediaPlayer类播放。
正常的类型转换,例如
Song x = (Song)listBox1.SelectedItem;
如何让它发挥作用?
答案 0 :(得分:1)
您正在选择歌曲名称(字符串)作为数据源类型。正如您所见,您无法通过显式转换将字符串转换为Song
类型(如果您真的想要保留字符串类型,则可以在MediaLibrary
中执行搜索)。或者,您可以将Song
对象本身绑定到ListBox。
MediaLibrary lib = new MediaLibrary();
var SongName = lib.Songs.ToList();
listBox1.ItemsSource = SongName;
然后在你的事件处理程序
中Song x = listBox1.SelectedItem as Song;
if(x != null)
MediaPlayer.Play(x);
如果您确实只想在string
中使用ListBox
类型,则可以在SelectedChanged
事件中执行此类搜索。 (你必须使lib
成为一个班级变量)
Song x = lib.Songs.Where(s => s.Name == listbox1.SelectedItem.ToString()).FirstOrDefault();
此方法的主要问题是,如果有两个具有相同名称的轨道,则仅返回第一个轨道。您需要一种区分它们的方法,但其他属性(例如Artist
)已从数据源中删除(因为您只使用了歌曲的Name
属性)。