Ваше определение MediaElement в XAML имеет привязку к MediaUri.Таким образом, он будет играть, как только назначен MediaUri.Чтобы обойти это, вам нужно LoadedBehavior к вашему XAML.
LoadedBehavior="Manual"
Полный код.
<MediaElement Source="{Binding MediaUri}" Visibility="{Binding IsIndexVisible, Converter={StaticResource InvertBoolToHiddenConverter}}" RenderTransformOrigin="0.5,0.877" Margin="0,0,0,19" LoadedBehavior="Manual" />
Для воспроизведения файла с помощью MediaElement с MVVM (и в вашем случае Caliburn Micro), потребует дополнительной работы.
В ViewModel
Вам необходимо объявить событие OnPlay и вызвать его в своем методе воспроизведения.
public event EventHandler OnPlay;
public void Play()
{
if(OnPlay!=null)
this.OnPlay(this, EventArgs.Empty);
}
В представлении,
Добавление загруженного события для вашего представления
Loaded="Window_Loaded"
В коде за файлом,
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var viewModelInstance = DataContext;
(viewModelInstance as MainWindowViewModel).OnPlay += (s, ev) => { this.MediaPlayer.Play(); };
}
Где MediaPlayer - это x: Имя вашего MediaElement.
Поскольку MediaElement не позволяет нам воспроизводить файл из ViewModel, мы создаем обходной путь с помощью хака в View.Вы создаете событие в представлении, которое запускается по методу воспроизведения, назначенному для вашей кнопки.View, в свою очередь, воспроизводит медиафайл.