Exemplo n.º 1
0
        public BookViewModel(Book book, SubscriptionService subs)
        {
            Book           = book;
            ButtonsVisible = false;

            // hides buttons when user is not signed-in
            subs
            .WhenAnyValue(x => x.Subscription)                                              // when users subscribption changes
            .Select(s => s != null)                                                         // set boolean if not null
            .ObserveOn(RxApp.MainThreadScheduler)                                           // observe on UI thread
            .Subscribe(Observer.Create <bool>(SetButtonVisibility));                        // observe changes in SetButtonVisibility method

            // update subscription status by observing users subscription
            subs
            .WhenAnyValue(x => x.Subscription)                                              // when users subscribption changes
            .Where(s => s != null && s.SubscribedBookIds != null)                           // where user has some existing subscribtions
            .Select(s => s.SubscribedBookIds.Contains(this.Book.Id))                        // set boolean if subscription contains this book
            .ObserveOn(RxApp.MainThreadScheduler)                                           // observe on UI thread
            .Subscribe(Observer.Create <bool>(SetSubscription));                            // observe changes in SetSubscription method

            // subscribe command
            Subscribe = ReactiveCommand.CreateFromTask(async() => {
                await subs.Add(Book.Id);
            });

            // unsubscribe command
            UnSubscribe = ReactiveCommand.CreateFromTask(async() => {
                await subs.Remove(Book.Id);
            });
        }