mvvm-light – 在Windows Phone MVVM应用程序中播放/暂停mp3文件
我试图在我的
Windows Phone 7.5 MVVM应用程序中播放小型mp3文件(使用MVVM Light).
我在尝试: 1.要使用SoundEffect: SoundEffectInstance instance; SoundEffect effect = SoundEffect.FromStream(stream); instance = effect.CreateInstance(); FrameworkDispatcher.Update(); instance.Play(); 问题:只允许使用.wav文件. 第2位.要使用Microsoft.Xna.Framework.Media.Song: Microsoft.Xna.Framework.Media.Song song = Microsoft.Xna.Framework.Media.Song.FromUri("name",new Uri("someUri")); 问题:文件存储在IsolatedStrorage中,我们需要知道文件的完整路径. 建议提示: string path = stream.GetType().GetField("m_FullPath",BindingFlags.Instance | BindingFlags.NonPublic).GetValue(stream).ToString(); 不管用. 3D.使用标准MediaElement. 问题:我需要访问ViewModel中的MediaElement控件,这对MVVM视图来说并不好. 如何解决这个问题? 解决方法
在MVVM样式中实现此目的的一种方法是使用MVVM Light Messenger类从viewmodel发送播放/暂停消息,视图将订阅和接收该消息.
假设您在播放和暂停视图中有一对按钮.您将在Expression Blend中删除每个上的EventToCommand behavior,然后将它们绑定到viewmodel中的一对RelayCommand属性,一个用于Play的RelayCommand,一个用于Pause.例如,在您的viewmodel中,您将拥有: public RelayCommand PlayCommand { get; private set; } public RelayCommand PauseCommand { get; private set; } Play命令会让Messenger发送Play消息,Pause命令会发送Pause消息.每条消息都是它自己的简单类: public class PlayMessage { } public class PauseMessage { } 然后,在viewmodel的构造函数中,您将为之前创建的两个RelayCommand属性创建新的RelayCommands,这些属性将具有Messenger发送消息的操作: MyViewModel() { PlayCommand = new RelayCommand( () => SendPlayMessage() ); PauseCommand = new RelayCommand( () => SendPauseMessage() ); } private void SendPlayMessage() { Messenger.Default.Send<PlayMessage>( new PlayMessage() ); } private void SendPauseMessage() { Messenger.Default.Send<PauseMessage>( new PauseMessage() ); } 那么你的视图将是have the Messenger subscribe到这两种消息类型,并且会有一些操作可以调用MediaElement上的Play和Pause方法: MyView() { Messenger.Default.Register<PlayMessage> ( this,( action ) => ReceivePlayMessage( action ) ); Messenger.Default.Register<PauseMessage> ( this,( action ) => ReceivePauseMessage( action ); ); } private void ReceivePlayMessage(PlayMessage msg) { myMediaElement.Play(); } private void ReceivePauseMessage(PauseMessage msg) { myMediaElement.Pause(); } myMediaElement是您在视图的xaml中为MediaElement提供的名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 远程桌面 – 远程桌面在复制时会破坏文件
- windows – 像Spy这样的软件如何获取信息?
- 从Windows批处理变量中获取子字符串
- 内容管理系统 – 是否有在Windows Azure上运行的CMS系统?
- xaml – 如何将图钉添加到Windows Phone 8.1地图控件?
- .net – Windows窗体应用程序中的Panel和GroupBox
- windows-xp – 如何在不打开新命令行窗口的情况下使用“sch
- Windows Server 2012 R2本身是否支持IIS SFTP?
- windows下 安装 rabbitMQ 及操作常用命令
- windows – 如何在qt中设置.exe文件的属性?