BooMark-プログラミングや美術のあれこれ-

半歩ずつでも進めばよろし

【WPF】画面遷移の方法_Navigation

RegionManagerのナビゲーションを使って画面遷移する方法。

▽▼完成図▼▽

1.メイン画面表示
f:id:boomark:20220303205215p:plain
2.「ボタンA」押下後
f:id:boomark:20220303205224p:plain

▽▼ソースコード▼▽

1.メイン画面にボタンを設置
■MainWindow.xaml

<Window x:Class="MyWorkProject.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BoolVisibilityConverter" ></BooleanToVisibilityConverter>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <Button Content="ボタンA"
                    Command="{Binding CmdAButton}"/>
            <ContentControl prism:RegionManager.RegionName="ContentRegion" />
        </StackPanel>
    </Grid>
</Window>

2.遷移先画面
■WorkA.xaml

<UserControl x:Class="MyWorkProject.Views.WorkA"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True">
    <Grid>
        <StackPanel>
            <TextBlock Text="WorkA" FontSize="20" FontWeight="Bold"/>
        </StackPanel>
    </Grid>
</UserControl>

3.App.xamlのコードビハインドにナビゲーション対象の画面(遷移先画面)を追加
■App.xaml.cs

using MyWorkProject.Views;
using Prism.Ioc;
using Prism.Modularity;
using System.Windows;

namespace MyWorkProject
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // 表示する画面を追加
            containerRegistry.RegisterForNavigation<WorkA>();
        }
    }
}

4.画面遷移処理
■MainWindowViewModel.cs

using MyWorkProject.Views;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;

namespace MyWorkProject.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private IRegionManager _regionManager;

        private string _title = "Prism Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        public DelegateCommand CmdAButton { get; }

  // RegionManagerを引数に設定
        public MainWindowViewModel(IRegionManager regionManager)
        {
            _regionManager = regionManager;
            CmdAButton = new DelegateCommand(ShowWorkA);
        }

        public void ShowWorkA()
        {
            // MainWindow.xamlの"ContentRegion"の箇所に、WorkAを表示
            _regionManager.RequestNavigate("ContentRegion", nameof(WorkA));
        }
    }
}

以上です!