Creating the XAML file
Last updated
Last updated
Xamarin.Forms provides us with some navigation modes including Hierarchical Navigation, Tabbedpage, MasterDetailPage and Modal Pages, etc. For our requirements, we want to have a hamburger menu on the main page. So we can use MasterDetailPage, which is a root page of the application and contains two areas: the left one is the MasterPage, the right one is the DetailPage. We can place the menu in the MasterPage. When clicking the menu item, the navigation service will show another page in DetailPage area.
In MvvmCross, there are some corresponding MvxFromsPagePresenter
for different page types in Xamarin.Forms, which define how a view will be displayed. We use MvxPagePresentationAttribute
to specify different page types. For more details, please view the documentation here: Xamarin.Forms View Presenter.
Open the App.cs
file in the MvxFormsMasterDetailDemo.Core project. Notice that the framework will start HomeViewModel
as the first page. Now let us create a MasterDetailPage
and use it to replace the first page.
Right click the Pages folder in the MvxFormsMasterDetailDemo.UI project and select Add
-New Item
. Select Content Page
from Xamarin.Forms category, like this:
Open the MasterDetailPage.xaml
file. Notice that this page is a ContentPage
. We need to change it to inherit from MvxMasterDetailPage
. Replace the XAML code with the following code:
We use MvxMasterDetailPage
to replace the default ContentPage
type. To do this, we need to add this code:
xmlns:views="clr-namespace:MvvmCross.Forms.Views;assembly=MvvmCross.Forms"
To set the ViewModel of the MasterDetailPage, we need to specify the x:TypeArguments
with the value viewModels:MasterDetailViewModel
. Do not forget to import the viewModels
namespace by adding xmlns:viewModels="clr-namespace:MvxFormsMasterDetailDemo.Core.ViewModels;assembly=MvxFormsMasterDetailDemo.Core"
.
Open the MasterDetailPage.xaml.cs
file, replace the base class of it from ContentPage
to MvxMasterDetailPage<MasterDetailViewModel>
. Add the MvxMasterDetailPagePresentation
attribute to the class, as the following code:
Let's take a look at the MvxMasterDetailPagePresentation
attribute. There are some very important properties of MvxMasterDetailPagePresentation
. Position
is an enum value that is used to indicate the type of the page, which is Root
here. Please set the other properties as shown, otherwise, you might get some odd results.