c# - wp7音乐播放器

标签 c#

我正在尝试在 wp.xml 中开发一个音乐播放器应用程序。 现在,我可以从 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;

如何让它发挥作用?

最佳答案

您正在选择歌曲名称(字符串)作为数据源类型。如您所见,您不能简单地通过显式强制转换将字符串转换为 Song 类型(如果您确实想要,可以在 MediaLibrary 中执行搜索保留字符串类型)。或者,您可以将 Song 对象本身绑定(bind)到您的 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);

如果您真的希望ListBox 中只有string 类型,您可以在SelectedChanged 事件中执行这样的搜索。 (您必须使 lib 成为类级别变量)

Song x = lib.Songs.Where(s => s.Name == listbox1.SelectedItem.ToString()).FirstOrDefault();

此方法的主要问题是,如果有两个同名轨道,则只返回第一个。您需要一种区分它们的方法,但其他属性(例如 Artist)已从您的数据源中删除(因为您只使用了 Song 的 Name 属性)。

关于c# - wp7音乐播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000323/

相关文章:

c# - 仅在模型的特定部分检查 "ModelState.IsValid"

c# - Teamcity Nunit 3.0 控制台运行器不工作

c# - DynamicMethod 性能低下

C# RegEx 精确匹配模式

c# - 取回表中的行数返回 -1

c# - 如何使用 LINQ 查询泛型集合

c# - 通过 WMI 查询对远程计算机上 UNC 路径的访问

c# - 一种重构枚举以包含数值的简单方法?

c# - 在没有 System.Web.dll 的情况下,C# 库代码如何知道它的托管应用程序类型?

c# - 找到一个点所属的最短线段