public void SetViewModelByView(Xamarin.Forms.Page view) { if (view.BindingContext != this.BindingContext && view.BindingContext is ViewModelBase vm) { vm.OnNavigationAsync(new NavigationParameters(), NavigationType.Back); return; } var viewType = view.GetType(); var viewModelType = Type.GetType(viewType.FullName.Replace("View", "ViewModel")); if (viewModelType == null) { throw new Exception($"Mapping type of {viewModelType} is not a Page"); } vm = ServiceLocator.Instance.Resolve(viewModelType) as ViewModelBase; if (vm != null) { view.BindingContext = vm; vm.OnNavigationAsync(new NavigationParameters(), NavigationType.New); } }
private bool IsModal(Page page) { return IsModal(page.GetType()); }
/// <summary> /// Resolves a View and its related ViewModel /// </summary> /// <param name="viewModelType">The ViewModel type</param> /// <param name="vm">The output ViewModel instance</param> /// <returns>The ViewModel instance</returns> public Xamarin.Forms.Page Resolve(Type viewModelType, out IViewModel viewModel) { var vm = _resolver.Resolve(viewModelType) as ViewModel; Xamarin.Forms.Application.Current.On <iOS>().SetPanGestureRecognizerShouldRecognizeSimultaneously(true); Xamarin.Forms.Page view = null; ViewMapAttribute map = _mappings[viewModelType]; if (vm == null || map == null) { throw new InvalidOperationException("View Model not mapped!"); } Xamarin.Forms.Page pageView = _resolver.Resolve(map.View) as Xamarin.Forms.Page; if (pageView == null) { string message = string.Format("Page not mapped! View Model: {0}", viewModelType); throw new InvalidOperationException(message); } if (map.MenuViewModel == null) { view = pageView; view.On <iOS>().SetUseSafeArea(true); } else { IViewModel menuViewModel = null; Xamarin.Forms.Page menuView = Resolve(map.MenuViewModel, out menuViewModel); if (menuView != null) { pageView.BindingContext = vm; pageView.Parent = null; menuView.Parent = null; if (string.IsNullOrWhiteSpace(menuView.Title)) { menuView.Title = menuView.GetType().Name; } if (string.IsNullOrWhiteSpace(pageView.Title)) { pageView.Title = pageView.GetType().Name; } view = new MasterDetailPage { Master = menuView, Detail = pageView }; pageView.On <iOS>().SetUseSafeArea(true); } } view.Title = vm.Title; view.BindingContext = vm; if (map.HideNavigation) { Xamarin.Forms.NavigationPage.SetHasNavigationBar(view, false); } viewModel = vm; return(view); }
string LoadResourceText(Page demoPage, string prefix, string suffix) { string className = demoPage.GetType().Name; Assembly asm = demoPage.GetType().GetTypeInfo().Assembly; return LoadResourceText(prefix + className + suffix, asm); }
private bool IsSameAsCurrentPage (Page page) { return (this.navigationPage.CurrentPage != null) && (this.navigationPage.CurrentPage.GetType () == page.GetType ()); }
protected void PagePushed(Page page) { Debug.WriteLine("PagePushed: Page={0}", page.GetType().Name); var navigationAware = helper.AsNavigationAware(page); if (navigationAware != null) { // navigationAware.PagePushed(page as IPage); } }
protected void OnNavigatingFrom(Page targetView, Page nextView) { Debug.WriteLine("OnNavigatingFrom: targetView={0}, previousView={1}", targetView.GetType().Name, nextView.GetType().Name); // var navigationAware = helper.AsNavigationAware(targetView); // // if (navigationAware != null) // { // // // navigationAware.OnNavigatingFrom(nextView as IPage); // } // modified 3-3-2015 var navigationAware = helper.AsNavigationAware(nextView); if (navigationAware != null) { // navigationAware.OnNavigatingFrom(targetView as IPage); } }
protected void OnNavigatingTo(Page targetView, Page previousView) { Debug.WriteLine("OnNavigatingTo: targetView={0}, nextView={1}", targetView.GetType().Name, previousView != null ? previousView.GetType().Name : string.Empty); var navigationAware = helper.AsNavigationAware(targetView); if (navigationAware != null) { // To page! navigationAware.OnNavigatingTo(targetView as IPage); } }
/// <summary> /// Called when [navigating from]. /// </summary> /// <param name="targetView">The target view.</param> /// <param name="nextView">The next view.</param> protected void OnNavigatingFrom(Page targetView, Page nextView) { Debug.WriteLine("OnNavigatingFrom: targetView={0}, previousView={1}", targetView.GetType().Name, nextView.GetType().Name); var navigationAware = AsNavigationAware(targetView); if (navigationAware != null) { navigationAware.OnNavigatingFrom(nextView); } }
public HomeMDPMaster() { InitializeComponent(); ListView = lst_notebooks; object version = ""; App.Current.Resources.TryGetValue("version", out version); lbl_version.Text = version.ToString(); mst_lock_unlock.Clicked += new EventHandler((o, e) => { LocknoteMgr.GetInstance().SecureErase(); ((App)Application.Current).ResumeApp(); }); mst_settings.Clicked += new EventHandler((o, e) => { ((NavigationPage)((HomeMDP)Application.Current.MainPage).Detail).PushAsync(new SettingsPage()); ((HomeMDP)Application.Current.MainPage).IsPresented = false; }); mst_new_notebook.Clicked += new EventHandler((o, e) => { TextEntryPrompt p = new TextEntryPrompt() { IsNavPage = true, PositiveButtonText = "Create", NegativeButtonText = "Cancel", PromptTitle = "New Notebook", Hint = "A Notebook" }; p.OnPromptSaved += new Prompt.PromptClosedEventListener(() => { LocknoteMgr.GetInstance().NoteManager.NewNotebook(p.Text); LocknoteMgr.GetInstance().SaveNotebooks(true); ((HomeMDP)Application.Current.MainPage).IsPresented = true; }); p.Show(((HomeMDP)Application.Current.MainPage).Detail); ((HomeMDP)Application.Current.MainPage).IsPresented = false; }); lst_notebooks.ItemTapped += new EventHandler((o, e) => { Notebook nb = (Notebook)o; SectionsPage sp = new SectionsPage(nb); sp.Title = nb.Title + " | Sections"; sp.ListView.ItemsSource = nb.Sections; ((HomeMDP)Application.Current.MainPage).Detail = new NavigationPage(sp); ((HomeMDP)Application.Current.MainPage).IsPresented = false; }); lst_notebooks.ItemLongTapped += new LNListView.ItemLongTappedHandler((o, e) => { Notebook nb = (Notebook)o; EditNotebookPrompt p = new EditNotebookPrompt() { Title = nb.Title, IsNavPage = true }; Xamarin.Forms.Page pg = ((NavigationPage)((HomeMDP)Application.Current.MainPage).Detail).CurrentPage; p.OnPromptSaved += new Prompt.PromptClosedEventListener(() => { nb.Title = p.Title; if (pg.GetType() == typeof(SectionsPage)) { pg.Title = p.Title + " | Sections"; } LocknoteMgr.GetInstance().SaveNotebooks(true); lst_notebooks.ItemsSource = LocknoteMgr.GetInstance().NoteManager.Notebooks; }); p.DeleteClicked += new EventHandler((o2, e2) => { Prompt p2 = new Prompt() { PromptTitle = "Are you sure?", PositiveButtonText = "Yes", NegativeButtonText = "No", IsNavPage = true }; p2.OnPromptSaved += new Prompt.PromptClosedEventListener(() => { LocknoteMgr.GetInstance().NoteManager.DeleteNotebook(nb); p.Dismiss(); }); p2.Show(((HomeMDP)Application.Current.MainPage).Detail); }); p.Show(((HomeMDP)Application.Current.MainPage).Detail); ((HomeMDP)Application.Current.MainPage).IsPresented = false; }); }
public Task PushPage(Xamarin.Forms.Page page, FreshBasePageModel model, bool modal = false, bool animate = true) { if (IsPresented) { IsPresented = false; } if (modal) { return(Detail.Navigation.PushModalAsync(page)); } KeyValuePair <MenuCellData, Xamarin.Forms.Page> innerPage = _pages.FirstOrDefault(p => ((NavigationPage)p.Value).CurrentPage.GetType() == page.GetType()); if (innerPage.Key != null) { return(Task.FromResult(ListView.SelectedItem = innerPage.Key)); } return((Detail as NavigationPage).PushAsync(page, animate)); }