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); }
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); }
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); }
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); }
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); }
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); }