Exemple #1
0
        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");
                }
            }
        }
Exemple #2
0
 public async void PopupGoBack()
 {
     await PopupNavigation.PopAsync();
 }