private void AddFlyoutItem(ContentPage page, PageConfigAttribute flyoutItemAttribute) { ShellSection shellSection = new ShellSection { Title = flyoutItemAttribute.FlyoutName, Icon = flyoutItemAttribute.FlyoutIcon, }; shellSection.Items.Add(new ShellContent() { Content = page }); _shellItems.Add(flyoutItemAttribute.FlyoutItemPosition, shellSection); }
private void Initialize(Type page, Type viewModelType, PageConfigAttribute attribute, List <Type> pageControllers, int index) { ContentPage currPage = (BasePage)Activator.CreateInstance(page); currPage.Appearing += CurrPage_Appearing; var viewModel = (BaseViewModel)Activator.CreateInstance(viewModelType); viewModel.NavBarImage = attribute.FlyoutIcon; viewModel.NavBarText = attribute.FlyoutName; currPage.BindingContext = viewModel; try { var controller = (IPageController)Activator.CreateInstance(pageControllers.ElementAt(index), currPage); _pageControllers.Add(controller); controller.ExecuteInitializeViewModel(viewModel); AddFlyoutItem(currPage, attribute); } catch (Exception) { Debug.WriteLine("Fail to add Page Controller"); } }
public void InitializePageSystem() { var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes(); var pageControllers = assemblyTypes.Where(c => c.Name.Contains("Controller") && c.GetInterfaces().Any(i => i == typeof(IPageController))).ToList(); for (int i = 0; i < pageControllers.Count(); i++) { Type page = assemblyTypes.FirstOrDefault(p => p.Namespace == pageControllers.ElementAt(i).Namespace && p.Name.Contains("Page") && p.BaseType == typeof(BasePage)); PageConfigAttribute attribute = pageControllers.ElementAt(i).GetCustomAttribute <PageConfigAttribute>(); if (attribute == null) { attribute = new PageConfigAttribute("", "", 0); } Type viewModelType = assemblyTypes.FirstOrDefault(p => p.Namespace == pageControllers.ElementAt(i).Namespace && p.Name.Contains("ViewModel") && p.BaseType == typeof(BaseViewModel)); if (page != null && viewModelType != null) { Initialize(page, viewModelType, attribute, pageControllers, i); } } AddFlyoutItemsToShell(); }