Esempio n. 1
0
        public async Task NavigationWithQueryStringWhenPageMatchesBindingContext()
        {
            var shell = new Shell();

            var one = new ShellItem {
                Route = "one"
            };
            var two = new ShellItem {
                Route = "two"
            };

            var tabone  = MakeSimpleShellSection("tabone", "content");
            var tabfour = MakeSimpleShellSection("tabfour", "content", null);

            one.Items.Add(tabone);
            two.Items.Add(tabfour);

            shell.Items.Add(one);
            shell.Items.Add(two);

            ShellTestPage pagetoTest = new ShellTestPage();
            await shell.GoToAsync(new ShellNavigationState($"//two/tabfour/content?{nameof(ShellTestPage.SomeQueryParameter)}=1234"));

            two.CurrentItem.CurrentItem.ContentTemplate = new DataTemplate(() =>
            {
                pagetoTest = new ShellTestPage();
                pagetoTest.BindingContext = pagetoTest;
                return(pagetoTest);
            });


            var page = (two.CurrentItem.CurrentItem as IShellContentController).GetOrCreateContent();

            Assert.AreEqual("1234", (page as ShellTestPage).SomeQueryParameter);
        }
Esempio n. 2
0
        public async Task DotDotNavigationPassesParameters()
        {
            Routing.RegisterRoute(nameof(DotDotNavigationPassesParameters), typeof(ContentPage));
            var shell = new Shell();
            var one   = new ShellItem {
                Route = "one"
            };

            var tabone = MakeSimpleShellSection("tabone", "content");

            one.Items.Add(tabone);

            shell.Items.Add(one);

            one.CurrentItem.CurrentItem.ContentTemplate = new DataTemplate(() =>
            {
                ShellTestPage pagetoTest  = new ShellTestPage();
                pagetoTest.BindingContext = pagetoTest;
                return(pagetoTest);
            });

            var page = (ShellTestPage)(one.CurrentItem.CurrentItem as IShellContentController).GetOrCreateContent();

            Assert.AreEqual(null, page.SomeQueryParameter);
            await shell.GoToAsync(nameof(DotDotNavigationPassesParameters));

            await shell.GoToAsync($"..?{nameof(ShellTestPage.SomeQueryParameter)}=1234");

            Assert.AreEqual("1234", page.SomeQueryParameter);
        }
Esempio n. 3
0
        public async Task ReNavigatingToCurrentLocationPassesParameters(bool useDataTemplates)
        {
            var           shell      = new Shell();
            ShellTestPage pagetoTest = new ShellTestPage();

            pagetoTest.BindingContext = pagetoTest;
            var one = CreateShellItem(pagetoTest, shellContentRoute: "content", templated: useDataTemplates);

            shell.Items.Add(one);
            ShellTestPage page = null;

            if (useDataTemplates)
            {
                page = (ShellTestPage)(one.CurrentItem.CurrentItem as IShellContentController).GetOrCreateContent();
            }
            else
            {
                page = (ShellTestPage)one.CurrentItem.CurrentItem.Content;
            }

            Assert.AreEqual(null, page.SomeQueryParameter);
            await shell.GoToAsync($"//content?{nameof(ShellTestPage.SomeQueryParameter)}=1234");

            Assert.AreEqual("1234", page.SomeQueryParameter);
            await shell.GoToAsync($"//content?{nameof(ShellTestPage.SomeQueryParameter)}=4321");

            Assert.AreEqual("4321", page.SomeQueryParameter);
            await shell.GoToAsync($"//content?{nameof(ShellTestPage.SomeQueryParameter)}");

            Assert.AreEqual(null, page.SomeQueryParameter);
        }
Esempio n. 4
0
        public async Task NavigationBetweenFlyoutItemsRetainsQueryString()
        {
            var testPage1 = new ShellTestPage();
            var testPage2 = new ShellTestPage();

            var flyoutItem1 = CreateShellItem <FlyoutItem>(testPage1, shellItemRoute: "flyoutItem1");
            var flyoutItem2 = CreateShellItem <FlyoutItem>(testPage2, shellItemRoute: "flyoutItem2");

            var shell            = new TestShell(flyoutItem1, flyoutItem2);
            var complexParameter = new object();

            IShellController shellController = shell;
            await shell.GoToAsync(new ShellNavigationState($"//flyoutItem2?{nameof(ShellTestPage.SomeQueryParameter)}=1234"), false,
                                  new Dictionary <string, object>()
            {
                { nameof(ShellTestPage.ComplexObject), complexParameter }
            });

            Assert.AreEqual("1234", testPage2.SomeQueryParameter);
            Assert.AreEqual(complexParameter, testPage2.ComplexObject);
            await shellController.OnFlyoutItemSelectedAsync(flyoutItem1);

            await shellController.OnFlyoutItemSelectedAsync(flyoutItem2);

            Assert.AreEqual("1234", testPage2.SomeQueryParameter);
            Assert.AreEqual(complexParameter, testPage2.ComplexObject);
        }
Esempio n. 5
0
        public async Task NavigatingBackToShellContentAbsolutelyClearsQueryParameter()
        {
            var           shell      = new Shell();
            ShellTestPage pagetoTest = new ShellTestPage();

            pagetoTest.BindingContext = pagetoTest;
            var one = CreateShellItem(pagetoTest, shellContentRoute: "content");

            shell.Items.Add(one);
            ShellTestPage page = (ShellTestPage)shell.CurrentPage;
            await shell.GoToAsync($"//content?{nameof(ShellTestPage.SomeQueryParameter)}=1234");

            await shell.Navigation.PushAsync(new ContentPage());

            await shell.GoToAsync($"//content");

            Assert.AreEqual(null, page.SomeQueryParameter);
        }
Esempio n. 6
0
        public async Task NavigationBetweenFlyoutItemWithPushedPageRetainsQueryString()
        {
            var testPage1 = new ShellTestPage();
            var testPage2 = new ShellTestPage();

            var flyoutItem1 = CreateShellItem <FlyoutItem>(testPage1, shellItemRoute: "flyoutItem1");
            var flyoutItem2 = CreateShellItem <FlyoutItem>(testPage2, shellItemRoute: "flyoutItem2");

            Routing.RegisterRoute("details", typeof(ShellTestPage));


            var shell = new TestShell(flyoutItem1, flyoutItem2);

            IShellController shellController = shell;
            await shell.GoToAsync(new ShellNavigationState($"//flyoutItem2/details?{nameof(ShellTestPage.SomeQueryParameter)}=1234"));

            await shellController.OnFlyoutItemSelectedAsync(flyoutItem1);

            await shellController.OnFlyoutItemSelectedAsync(flyoutItem2);

            var testPage = (shell.CurrentItem.CurrentItem as IShellSectionController).PresentedPage as ShellTestPage;

            Assert.AreEqual("1234", testPage.SomeQueryParameter);
        }