shuhelohelo’s blog

Xamarin.Forms多めです.

Xamarin.Formsのナビゲーション

docs.microsoft.com

ナビゲーションは,以下のようにページをスタックに積み上げている(Push).

f:id:shuhelohelo:20191204135130p:plain

戻るときはそのスタックを上から1つずつ取り除く(Pop)していく.

これがナビゲーションスタック.

ナビゲーションを使うには,App.xaml.csでMainPageにNavigationPageインスタンスを渡す.これがナビゲーションスタックになる.NavigationPageをインスタンス化するときにページのインスタンスを渡してあり,これがアプリ起動時に表示されるルートページになる.

        public App()
        {
            InitializeComponent();

            MainPage = new NavigationPage(new MainPage());
        }

これでNavigationを使用する準備が完了しました.

各ページのコードビハインドでNavigation.PushAsyncメソッドで指定のページに遷移します.つまり,上の図のようにナビゲーションスタックにページが一枚積まれます.

CommandとCommandParameterを使ったナビゲーション

ボタンが押されたときにCommandとCommandParameterを使って指定したページに遷移する方法は以下のとおりです.

        public ICommand NavigationCommand { get; }

        public MainPage()
        {
            InitializeComponent();

            NavigationCommand = new Command<string>(async (pageName) => await NavigateAsync(pageName));
            this.BindingContext = this;
        }

        private async Task NavigateAsync(string pageName)
        {
            switch (pageName)
            {
                case "ImageCirclePage":
                    await Application.Current.MainPage.Navigation.PushAsync(new ImageCirclePage());
                    break;
            }
        }