我的環境:VS2022、.Net6.0
【1】先完成基本的環境搭建,可參考 C#-WPF-Prism.DryIoc-【1】環境搭建 - 輕吟淺唱,驀然花開 - 博客園 (cnblogs.com)
【2】在Views文件夾中添加三個UserControl 分別為View1、View2和View3並分別為三個UserControl添加一個文本控件加以區分
【3】編輯MainView 添加三個按鈕用來切換三個View並為這三個按鈕綁定命令和參數,添加一個ContentControl承載這三個用戶控件
<Window x:Class="Wpf_Prism.DryIoc_Region.Views.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Wpf_Prism.DryIoc_Region.Views" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" mc:Ignorable="d" Title="MainView" Height="450" Width="800"> <DockPanel> <UniformGrid Columns="3" DockPanel.Dock="Top"> <Button Content="打開View1" Command="{Binding OpenViewCommand}" CommandParameter="View1"/> <Button Content="打開View2" Command="{Binding OpenViewCommand}" CommandParameter="View2"/> <Button Content="打開View3" Command="{Binding OpenViewCommand}" CommandParameter="View3"/> </UniformGrid> <!--#region 用來承載 View1 View2 View3 這三個不同的頁面--> <ContentControl prism:RegionManager.RegionName="MainContentRegion"/> </DockPanel> </Window>
【4】在App.xaml.cs中添加代碼,把View1、View2和View3 分別注冊為導航
using Prism.Ioc; using System.Windows; using Wpf_Prism.DryIoc_Region.Views; namespace Wpf_Prism.DryIoc_Region { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App { protected override Window CreateShell() { return Container.Resolve<MainView>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<View1>(); containerRegistry.RegisterForNavigation<View2>(); containerRegistry.RegisterForNavigation<View3>(); } } }
【5】編輯MainViewModel.cs 代碼如下
using Prism.Commands; using Prism.Regions; namespace Wpf_Prism.DryIoc_Region.ViewModels { public class MainViewModel { private readonly IRegionManager regionManager; public DelegateCommand<string> OpenViewCommand { get; private set; } public MainViewModel(IRegionManager regionManager) { this.regionManager = regionManager; OpenViewCommand = new DelegateCommand<string>(OpenView); } private void OpenView(string obj) { regionManager.Regions["MainContentRegion"].RequestNavigate(obj); } } }
【6】啟動項目,運行效果如下
完成,謝謝!