【WPF】画面遷移の方法_Navigation
RegionManagerのナビゲーションを使って画面遷移する方法。
▽▼完成図▼▽
1.メイン画面表示
2.「ボタンA」押下後
▽▼ソースコード▼▽
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)); } } }
以上です!