Binding MediaElement to a ViewModel in a Windows 8 Store App
- by jdanforth
If you want to play a video from your video-library in a MediaElement control of a Metro Windows Store App and tried to bind the Url of the video file as a source to the MediaElement control like this, you may have noticed it’s not working as well for you:  <MediaElement Source="{Binding Url}" />          I have no idea why it’s not working, but I managed to get it going using  ContentControl instead:  <ContentControl Content="{Binding Video}" />       The code behind for this is:  protected override void OnNavigatedTo(NavigationEventArgs e)          {              _viewModel = new VideoViewModel("video.mp4");              DataContext = _viewModel;          }          And the VideoViewModel looks like this:  public class VideoViewModel          {              private readonly MediaElement _video;              private readonly string _filename;                         public VideoViewModel(string filename)              {                   _filename = filename;                   _video = new MediaElement { AutoPlay = true };                  //don't load the stream until the control is ready                  _video.Loaded += VideoLoaded;               }                          public MediaElement Video              {                   get { return _video; }              }                          private async void VideoLoaded(object sender, RoutedEventArgs e)              {                   var file = await KnownFolders.VideosLibrary.GetFileAsync(_filename);                  var stream = await file.OpenAsync(FileAccessMode.Read);                  _video.SetSource(stream, file.FileType);               }          }  I had to wait for the MediaElement.Loaded event until I could load and set the video stream.