2

我正在尝试在 wp 中开发音乐播放器应用程序。现在,我可以从 MediaLibrary 中检索歌曲列表并将其添加到列表框中。

MediaLibrary lib = new MediaLibrary();
var SongName = (from m in lib.Songs select m.Name).ToList();
listBox1.ItemsSource = SongName;

列表正在填充,我正在使用事件访问 ListBox 项目

listBox1_SelectionChanged 

我希望将所选项目转换为歌曲类型,以便我可以使用 MediaPlayer 类播放它。

正常的类型转换,例如

Song x = (Song)listBox1.SelectedItem;

我如何使它工作?

4

1 回答 1

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,已从您的数据源中删除(因为您只使用了 Song 的Name属性)。

于 2013-04-14T15:09:47.713 回答