private ICommand CreateBuyBookCommand(PurchaseBookService purchaseService, IWishListRepository wishListRepository, IMessageQueue messaging) { return(new Command( execute: async() => { IsBusy = true; try { purchaseService.PurchaseAsync(m_book); m_bookViewModel.PurchasedCount += 1; await wishListRepository.RemoveAsync(m_book); ChangeCanCommandExecute(PurchaseBook); UpdateCanBookBeAddedToWishList(m_book); messaging.Send(this, BookPurchased, m_book); } catch (Exception ex) { m_messaging.Send(this, ex); } IsBusy = false; }, canExecute: () => { return Book != null && purchaseService.IsMoneyEnoughForPurchase(m_book); })); }
public PurchaseBookViewModel(IBookRepository bookRepository, IReviewRepository reviewRepository, IMessageQueue messaging, IWishListRepository wishListRepository, WriteReviewViewModel newReview, PurchaseBookService purchaseService) { m_booksRepository = bookRepository; m_reviewRepository = reviewRepository; m_wishListRepository = wishListRepository; m_purchaseService = purchaseService; m_messaging = messaging; NewReview = newReview; Reviews = new ObservableRangeCollection <Review>(); PurchaseBook = CreateBuyBookCommand(purchaseService, wishListRepository, messaging); AddWishList = CreateAddWishListCommand(purchaseService, wishListRepository); ShowBookCover = CreateShowBookCoverCommand(messaging); SubmitNewReview = CreateSubmitNewReviewCommand(reviewRepository); newReview.PropertyChanged += (sender, args) => { ChangeCanCommandExecute(SubmitNewReview); }; }
private ICommand CreateAddWishListCommand(PurchaseBookService purchaseService, IWishListRepository wishListRepository) { return(new Command( execute: async() => { IsBusy = true; try { m_canAddToWishList = false; ChangeCanCommandExecute(AddWishList); await wishListRepository.AddAsync(m_book); } catch (Exception ex) { m_canAddToWishList = true; ChangeCanCommandExecute(AddWishList); m_messaging.Send(this, ex); } IsBusy = false; }, canExecute: () => { return m_canAddToWishList; })); }