public void PopupNavigateTo(string pageKey, params object[] pageParameters) { lock (_pagesByKey) { if (_pagesByKey.ContainsKey(pageKey)) { var type = _pagesByKey[pageKey]; ConstructorInfo constructor; object[] parameters; if (pageParameters == null) { constructor = type.GetTypeInfo() .DeclaredConstructors .FirstOrDefault(c => !c.GetParameters().Any()); parameters = new object[] { }; } else { var constructors = type.GetTypeInfo().DeclaredConstructors; constructor = constructors.FirstOrDefault( c => { var p = c.GetParameters(); return(p.Count() == pageParameters.Count() && p.ToList().TrueForAll(t => pageParameters.Any(pp => t.ParameterType == pp.GetType()))); }); } if (constructor == null) { throw new InvalidOperationException( "No suitable constructor found for page " + pageKey); } var page = constructor.Invoke(pageParameters) as PopupPage; PopupNavigation.PushAsync(page); } else { throw new ArgumentException( string.Format( "No such page: {0}. Did you forget to call NavigationService.Configure?", pageKey), "pageKey"); } } }
public async void PopupGoBack() { await PopupNavigation.PopAsync(); }