Один из способов сделать это в стиле MVVM - использовать класс MVVM Light Messenger для отправки сообщений воспроизведения / паузы от модели представления, на которую представление подписалось бы и получило.
Скажем, у вас есть паракнопок на ваш взгляд для воспроизведения и паузы.Вы бы сбросили поведение EventToCommand для каждого из них в Expression Blend, а затем связали бы их с парой свойств RelayCommand в вашей модели представления, одной RelayCommand для Play, одной для Pause.Например, в вашей модели представления вы должны иметь:
public RelayCommand PlayCommand { get; private set; }
public RelayCommand PauseCommand { get; private set; }
Команда Play будет заставлять Messenger отправлять сообщение Play, а команда Pause будет отправлять сообщение Pause.Каждое сообщение будет иметь свой собственный простой класс:
public class PlayMessage { }
public class PauseMessage { }
Затем в конструкторе вашей модели представления вы создадите новые RelayCommands для двух свойств RelayCommand, которые вы создали ранее, и которые будут иметь действия, которые 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() );
}
В этом случае будет отображать подписку Messenger для обоих типов сообщений и действия, которые вызовут методы Play и Pause для MediaElement:
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 - это имя, которое вы даете MediaElement в xaml вашего представления.