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文件的属性?
