Пример #1
0
        public virtual void ShowCarouselPage(
            Type view,
            MvxCarouselPagePresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = CloseAndCreatePage(view, request, attribute);

            if (attribute.Position == CarouselPosition.Root)
            {
                if (!(page is MvxCarouselPage carouselPageRoot))
                {
                    throw new MvxException($"A root page should be of type {nameof(MvxCarouselPage)}");
                }

                PushOrReplacePage(FormsApplication.MainPage, page, attribute);
            }
            else
            {
                var carouselHost = GetHostPageOfType <MvxCarouselPage>();
                if (carouselHost == null)
                {
                    MvxTrace.Trace($"Current root is not a CarouselPage show your own first to use custom Host. Assuming we need to create one.");
                    carouselHost = new MvxCarouselPage();
                    PushOrReplacePage(FormsApplication.MainPage, carouselHost, attribute);
                }
                carouselHost.Children.Add(page as ContentPage);
            }
        }
Пример #2
0
        public virtual async Task <bool> ShowCarouselPage(
            Type view,
            MvxCarouselPagePresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            var page = await CloseAndCreatePage(view, request, attribute);

            if (attribute.Position == CarouselPosition.Root)
            {
                if (!(page is MvxCarouselPage carouselPageRoot))
                {
                    throw new MvxException($"A root page should be of type {nameof(MvxCarouselPage)}");
                }

                await PushOrReplacePage(FormsApplication.MainPage, page, attribute);
            }
            else
            {
                var carouselHost = GetPageOfType <CarouselPage>();
                if (carouselHost == null)
                {
                    MvxFormsLog.Instance?.Log(LogLevel.Trace, "Current root is not a CarouselPage show your own first to use custom Host. Assuming we need to create one.");
                    carouselHost = new CarouselPage();
                    await PushOrReplacePage(FormsApplication.MainPage, carouselHost, attribute);
                }
                carouselHost.Children.Add(page as ContentPage);
            }
            return(true);
        }
Пример #3
0
 public virtual bool CloseCarouselPage(IMvxViewModel viewModel, MvxCarouselPagePresentationAttribute attribute)
 {
     if (attribute.Position == CarouselPosition.Root)
     {
         if (FormsApplication.MainPage is MvxNavigationPage rootNavigationPage)
         {
             rootNavigationPage.PopAsync(attribute.Animated);
         }
         return(true);
     }
     else
     {
         var carouselHost = FormsApplication.MainPage as CarouselPage;
         if (carouselHost == null && FormsApplication.MainPage is MvxNavigationPage navigationPage)
         {
             carouselHost = navigationPage.CurrentPage as CarouselPage;
         }
         var page = carouselHost.Children.OfType <IMvxPage>().FirstOrDefault(x => x.ViewModel == viewModel);
         if (page is ContentPage carouselPage)
         {
             carouselHost.Children.Remove(carouselPage);
         }
         else
         {
             return(false);
         }
         return(true);
     }
 }
Пример #4
0
        public virtual void ShowCarouselPage(
            Type view,
            MvxCarouselPagePresentationAttribute attribute,
            MvxViewModelRequest request)
        {
            CloseAllModals();

            var page = CreatePage(view, request);

            if (attribute.Position == CarouselPosition.Root)
            {
                if (page is CarouselPage carouselPageRoot)
                {
                    if (attribute.WrapInNavigationPage && FormsApplication.MainPage is MvxNavigationPage currentPage)
                    {
                        currentPage.PushAsync(page);
                    }
                    else if (attribute.WrapInNavigationPage)
                    {
                        FormsApplication.MainPage = new MvxNavigationPage(page);
                    }
                    else
                    {
                        FormsApplication.MainPage = page;
                    }
                }
                else
                {
                    throw new MvxException($"A root page should be of type {nameof(CarouselPage)}");
                }
            }
            else
            {
                var carouselHost = FormsApplication.MainPage as CarouselPage;
                if (carouselHost == null && FormsApplication.MainPage is MvxNavigationPage navigationPage)
                {
                    carouselHost = navigationPage.CurrentPage as CarouselPage;
                    if (carouselHost == null)
                    {
                        MvxTrace.Trace($"Current root is not a CarouselPage show your own first to use custom Host. Assuming we need to create one.");
                        carouselHost = new MvxCarouselPage();
                        navigationPage.PushAsync(carouselHost);
                    }
                }
                else if (carouselHost == null)
                {
                    MvxTrace.Trace($"Current root is not a CarouselPage show your own first to use custom Host. Assuming we need to create one.");
                    carouselHost = new MvxCarouselPage();
                    FormsApplication.MainPage = carouselHost;
                }

                if (string.IsNullOrEmpty(page.Title))
                {
                    page.Title = attribute.Title;
                }
                carouselHost.Children.Add(page as ContentPage);
            }
        }
Пример #5
0
 public virtual bool CloseCarouselPage(IMvxViewModel viewModel, MvxCarouselPagePresentationAttribute attribute)
 {
     if (attribute.Position == CarouselPosition.Root)
     {
         return(ClosePage(FormsApplication.MainPage, null, attribute));
     }
     else
     {
         var carouselHost = GetHostPageOfType <MvxCarouselPage>();
         var page         = carouselHost.Children.OfType <IMvxPage>().FirstOrDefault(x => x.ViewModel == viewModel);
         if (page is ContentPage carouselPage)
         {
             carouselHost.Children.Remove(carouselPage);
         }
         else
         {
             return(false);
         }
         return(true);
     }
 }
Пример #6
0
 public virtual Task <bool> CloseCarouselPage(IMvxViewModel viewModel, MvxCarouselPagePresentationAttribute attribute)
 {
     if (attribute.Position == CarouselPosition.Root)
     {
         return(FindAndCloseViewFromViewModel(viewModel, FormsApplication.MainPage, attribute));
     }
     else
     {
         var carouselHost = GetPageOfType <MvxCarouselPage>();
         var page         = carouselHost.Children.OfType <IMvxPage>().FirstOrDefault(x => x.ViewModel == viewModel);
         if (page is ContentPage carouselPage)
         {
             carouselHost.Children.Remove(carouselPage);
         }
         else
         {
             return(Task.FromResult(false));
         }
         return(Task.FromResult(true));
     }
 }