Prismを使ってページ遷移する

久しぶりにXamarin触ってみようと思ったら、どうやって書くのか完全に忘れてた。

自分の記憶を手繰り寄せるのと、今後も見返すためにメモを残そうと思う。

今回は、例えばMainPage.xamlにボタンを追加してページ遷移する。

MainPage.xamlからSingleDigitAdd.xamlに遷移する。

ViewとViewModelsを用意する。

SingleDigitAdd.xamlとSingleDigitAddViewModel.csを用意する。

App.xaml.csのRegisterTypesを編集

RegisterTypesというメソッドがあるので、そこにViewとViewModelの関連付けをする。7行目を追加しています。

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterSingleton<IAppInfo, AppInfoImplementation>();

            containerRegistry.RegisterForNavigation<NavigationPage>();
            containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
            containerRegistry.RegisterForNavigation<SingleDigitAdd, SingleDigitAddViewModel>();
        }

MainPage.xamlにボタン追加

<Button Text="たしざん"
Command="{Binding NavigateSingleDigitAddCommand}"

NavigateSingleDigitAddCommandというコマンドをバインドしたところがミソ

MainPageViewModel.csに遷移ロジックを記述

  1. メンバーにDelegateCommandを用意する
  2. コンストラクターで DelegateCommand に対応する遷移ロジックを登録。今回はPageSingleDigitAddShowというメソッド。
  3. 遷移ロジックの中身を記述。
    NavigationService.NavigateAsync("SingleDigitAdd");

MainPageViewModel.cs

using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ArithmeticStarter.Views;

namespace ArithmeticStarter.ViewModels
{
    public class MainPageViewModel : ViewModelBase
    {
        public DelegateCommand NavigateSingleDigitAddCommand { get; set; }
        public MainPageViewModel(INavigationService navigationService)
            : base(navigationService)
        {
            Title = "トップページ";
            NavigateSingleDigitAddCommand = new DelegateCommand(PageSingleDigitAddShow);
        }

        private void PageSingleDigitAddShow()
        {
            NavigationService.NavigateAsync(nameof(SingleDigitAdd));
        }
    }
}