1 ) All the contents in the xaml Page should be places inside the TAG for Windows Phone This code will contain 5 Files : 1 ) NavigatePage.xaml 2 ) Navigatepage.xaml.cs 3 ) NavigatepageViewModal.cs 4 ) Navigationutility.cs 5 ) ButtonClickCommand.cs ——————*————————— |
Code for NavigatePage.xaml * This page contains a button whose click event will direct you to another page * |
------------------*--------------------------- Code for NavigatePage.xaml.cs * provide the datacontext for the entire page in the page constructor * //constructor public NavigatePage () { InitializeComponent(); //provide data context this.DataContext = new NavigateViewModal(); } ------------------*--------------------------- Code for NavigatepageViewModal.cs * this is the view modal for the NavigatePage which helps to register the button click binding * public class NavigatepageViewModal { public ButtonClickCommand LoginCommand { get; private set; } public NavigatepageViewModal () { LoginCommand = new ButtonClickCommand(UserValidate); LoginCommand.IsEnabled = true; } /// /// This function is calling the service /// and passing username and userpassword /// private void UserValidate() { //redirect the NavigatePage to MainPage.xaml(Or any custom Page) using the //methods of Navigationutility new Navigationutility().Navigate("/MainPage.xaml"); } } ------------------*--------------------------- Code for ButtonClickCommand.cs * This class registers the method to be executed when button is clicked and call the navigation service to navigate * public class ButtonClickCommand : ICommand { private readonly Action handler; private bool isEnabled; public ButtonClickCommand(Action handler) { this.handler = handler; } //checks if button execution has been set to true public bool IsEnabled { get { return isEnabled; } set { if (value != isEnabled) { isEnabled = value; if (CanExecuteChanged != null) { CanExecuteChanged(this, EventArgs.Empty); } } } } //method to return if click event enabled property public bool CanExecute(object parameter) { return IsEnabled; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { handler(); } } ------------------*--------------------------- Code for Navigationutility.cs *This page contains the code for navigation to another frame* //create a phone application frame to get the main frame private PhoneApplicationFrame _mainFrame; //For navigating event which can be cancelled public event NavigatingCancelEventHandler Navigating; /// /// method to take uri and navigate to /// the specified page /// /// Uri public void NavigateTo(Uri pageUri) { if (EnsureMainFrame()) { //navigates the main frame(PhoneApplicationFrame ) to the uri passed _mainFrame.Navigate(pageUri); } } //checks and returns if main frame present //else sets the main frame private bool EnsureMainFrame() { if (_mainFrame != null) { return true; } //gets the main frame for the current app _mainFrame = Application.Current.RootVisual as PhoneApplicationFrame; if (_mainFrame != null) { // Could be null if the app runs inside a design tool _mainFrame.Navigating += (s, e) => { if (Navigating != null) { Navigating(s, e); } }; return true; } return false; } //this method is called from other view modal classes public void Navigate(string url) { NavigateTo(new Uri(url, UriKind.Relative)); } ------------------*---------------------------
The flow of the entire code would be like
1 ) NavigatePage.xaml
2 ) Navigatepage.xaml.cs
3 ) NavigatepageViewModal.cs
4 ) Navigationutility.cs
5 ) ButtonClickCommand.cs
NavigatePage.xaml ->
Navigatepage.xaml.cs( calls NavigatepageViewModal while assigning datacontext to entire page) ->
NavigatepageViewModal.cs ( registers the button click by calling ButtonClickCommand and calls the methods of the Navigationutility to navigate)
->
ButtonClickCommand.cs (registers the method to be executed in NavigatepageViewModal when button click is performed)->
Navigationutility.cs (Directs the page in the phone application frame to the other page)->
MainPage.xaml( or your custom page )