Navigation patterns in a cross-platform environment is difficult because the heuristics of each platform are simply not the same. When trying to achieve a single-implementation for all platforms, you end up being in a bit of a conundrum.
The Xamarin.Forms page navigation experience is somewhat limited, though I think that is because of the hindrance of trying to be all things to all platforms. Hierarchical navigation between pages, using the NavigationPage, seems to be fairly common and I didn’t have much issue with settling on it as a mechanism to navigate from summary to detailed views of data but that didn’t resolve the question of how I would like people to be able to navigate the different aspects of the application.
At first I was excited to use MasterDetail Page Navigation Recipe but it didn’t allow me to adhere to a strict MVVM pattern straight out of the box. Upon further investigation I found that the common term for this navigation pattern is a “Hamburger Menu”, and it has quite a history. Due to its history, there has been a lot of discussion about the problems with it (Louie A. has a fantastic synopsis here). I believe that Carousel also suffers from a lack of discoverability so that left me with deciding on the NavigationPage and TabbedPage which can be used together.
Here we go…