Creating a navigation service
In a typical multi-platform mobile app architecture, one would have to implement a platform-specific navigation service for each platform the app supports. In our case, Xamarin.Forms has already done this, so we will simply implement a single navigation service that extends the Xamarin.Forms navigation abstraction so that we can perform ViewModel-to-ViewModel navigation.
The first thing we need to do is define an interface for our navigation service that will define its methods. We start with an interface so that the service can be added to ViewModels via constructor injection, which we'll dive into in Chapter 4, Platform-Specific Services and Dependency Injection, and we can easily provide alternative implementations of the service without changing ViewModels that depend on it. A common scenario for this is creating a mock of the service that gets used when unit testing ViewModels.
In order to create the navigation service, perform the following...