private async void LoadMovieGroups() { IsBusy = true; MovieGroups.Clear(); HasThrownError = false; ErrorMessage = string.Empty; try { await _servicesManager.GetMovieGroupsAsync(onEachMovieGroupCallback : movieGroup => { if (movieGroup != null && movieGroup.Movies != null && movieGroup.Movies.Any()) { var movieGroupWrapper = new MovieGroupWrapper(movieGroup, onMovieSelectedCallback: selectedMovie => { ShowViewModel <MovieDetailViewModel>(selectedMovie); }); MovieGroups.Add(movieGroupWrapper); IsBusy = false; } }); } catch (Exception) { HasThrownError = true; ErrorMessage = "An error has occurred while loading some of the movies"; // TODO: Use a Resx file IsBusy = false; } }
public GroupedMoviesViewModel( IMessenger messenger, IMovieRepository movieRepository) { MovieRepository = movieRepository; if (MovieRepository != null) { MovieGroups = MovieRepository.LoadMovies() .GroupBy(m => m.Genre) .Select(g => new MovieGroupViewModel(messenger) { Title = g.Key.ToString(), Movies = g.ToList(), GroupImageUrl = g.First().ImageUrl }); } MovieTappedCommand = new RelayCommand <Movie>((movie) => { var movieGroup = MovieGroups.First(mg => mg.Movies.Contains(movie)); messenger.Send <MovieSelectedMessage>(new MovieSelectedMessage { Movie = movie, MovieGroup = movieGroup }); }); MovieSelectedCommand = new RelayCommand(() => { var movieGroup = MovieGroups.First(mg => mg.Movies.Contains(SelectedMovie)); messenger.Send <MovieSelectedMessage>(new MovieSelectedMessage { Movie = SelectedMovie, MovieGroup = movieGroup }); }); }