Esempio n. 1
0
        /// <inheritdoc />
        /// <summary>
        /// remove page inside navigation stack
        /// </summary>
        /// <param name="name"></param>
        public void RemovePage(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
#if DEBUG || DB_SMHOME
                throw new ArgumentNullException(nameof(name));
#else
                return;
#endif
            }

            var pageName = _namingConventions.GetViewName(name);
            var page     = _lazyNavigation.Value.NavigationStack
                           .FirstOrDefault(pg => pg.GetType().Name == pageName);

            if (page != null)
            {
                _lazyNavigation.Value.RemovePage(page);
            }
        }
Esempio n. 2
0
        public GojekBasePageView ResolvePage <T>(string name, NavigationParameters parameters = null)
            where T : GojekBasePageViewModel
        {
            var viewName = _namingConventions.GetViewName(name);

            if (!_componentContext.IsRegisteredWithName <GojekBasePageView>(viewName))
            {
                return(null);
            }

            var page = _componentContext.ResolveNamed <GojekBasePageView>(viewName);

            var viewModelName = _namingConventions.GetViewModelName(name);

            if (!_componentContext.IsRegisteredWithName <GojekBasePageViewModel>(viewModelName))
            {
                return(page);
            }
            var viewModel = _componentContext.ResolveNamed <GojekBasePageViewModel>(viewModelName);

            //assign current page navigator, dialoger
            viewModel.Navigator = _componentContext.Resolve <ICrossNavigator>();
            viewModel.Dialoger  = _componentContext.Resolve <ICrossDialogProvider>();

            #region title

            //set an toan truong hop quen dat title cho mot trang nao do trong resource
            if (!string.IsNullOrEmpty(viewModel.Title))
            {
                viewModel.Title = viewModel.Title;
            }

            NavigationPage.SetHasNavigationBar(page, viewModel.HasNavigationBar);
            NavigationPage.SetHasBackButton(page, viewModel.HasBackButton);
            NavigationPage.SetBackButtonTitle(page, viewModel.BackButtonTitle);

            #endregion

            //call init before page appearing only if parameter not null
            if (parameters != null)
            {
                page.OnInitializeView(parameters: parameters);
                viewModel.OnInitializeViewModel(parameters: parameters);
            }

            //extension bind viewmodel => view (page)
            page.BindCrossPageViewModel <T>(viewModel);
            return(page);
        }