Daniel
Daniel

Reputation: 1545

MvvmCross and back button in Windows Phone app

I'm building a Windows Phone app (8.1 using WinRT) using MvvmCross. To navigate to a new view I using ShowViewModel(). But when I hit the back button on the phone the app is closing instead of navigating back to the first view. How can I do it I want to return to the first view when I hitting the back button?

Upvotes: 0

Views: 822

Answers (2)

tempy
tempy

Reputation: 1557

Here's a simpler solution. Create a base type for all your WP pages that derives from MvxWindowsPage. Then, handle the back key there and route the proper information to your VM:

    public abstract class MyBaseView : MvxWindowsPage {
    public MyBaseView() {
        this.InitializeComponent();
        HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }

    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) {
        if (Frame.CanGoBack) {
            var vm = ViewModel as MyBaseViewModel;
            if (vm != null) {
                e.Handled = true;
                vm.GoBackCommand.Execute(null);
            }
        }
    }
}

Now, you also have to make sure that you have a base viewmodel which derives from MvxViewModel and from which you derive all your VMs. That base VM should have a GoBackCommand observable property, and executing that command should do a simple Close(this).

To see what's going on under the hood, see this related question: Windows Phone 8.1 Universal App terminates on navigating back from second page?

EDIT Fixed declaration.

Upvotes: 3

Daniel
Daniel

Reputation: 1545

I solved it to use a interface in my viewmodel with a backbutton event, then I wrote a client speific implementation of it. In the viewmodel I handle the event and called the close method in the my base class MvxViewModel. Read more about my solution on my blog, http://danielhindrikes.se/windows-phone/handle-windows-phone-back-button-pressed-when-using-mvvm/

Upvotes: 4

Related Questions