public IObservable<Unit> PushPopup(IPopModalViewModel page, string contract = null, bool animate = true)
        {
            Ensure.ArgumentNotNull(page, nameof(page));

            return this
                    ._view
                    .PushPopup(page, contract, animate)
                    .Do(
                            _ =>
                            {
                                AddToStackAndTick(this._popmodalStack, page, false);
                                _logger.Debug("Added page '{0}' (contract '{1}') to stack.", page.Title, contract);
                            });
        }
        public IObservable <Unit> PushPopup(IPopModalViewModel viewModel, string contract, bool animate)
        {
            Ensure.ArgumentNotNull(viewModel, nameof(viewModel));

            return(Observable
                   .Start(
                       () =>
            {
                var page = this.LocatePageFor(viewModel, contract);
                this.SetPageTitle(page, viewModel.Title);
                return page;
            },
                       this._backgroundScheduler)
                   .ObserveOn(this._mainScheduler)
                   .Where(IsPopupPage)
                   .SelectMany(
                       page =>
                       this.Navigation
                       .PushPopupAsync((PopupPage)page, animate)
                       .ToObservable()));
        }