以下以「创建一个带按钮交互、页面导航的模块化 Prism WPF 应用」为例,完整演示 Prism Template Pack 的模板创建、代码片段使用、模块集成全流程。
一、环境准备
-
Visual Studio 2022(已安装 WPF 工作负载)
-
已安装 Prism Template Pack 2.2.000+(安装步骤参考前文)
-
.NET 8 SDK
二、步骤 1:用「Prism Blank App」创建主应用
1. 新建空白 Prism 项目
-
打开 VS2022 → 「创建新项目」→ 搜索「Prism Blank App」→ 选择模板。
-
配置项目信息:
-
项目名称:
PrismTemplateDemo -
存储路径:自定义(避免中文路径)
-
框架:.NET 8
-
容器:DryIoc(推荐)
-
ViewModel 策略:Auto(默认按命名约定关联)
-
-
点击「创建」,生成基础项目结构。
2. 主窗口布局(MainWindow.xaml)
修改主窗口,添加「导航按钮」和「内容显示区域(Region)」:
<Window x:Class="PrismTemplateDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
Title="Prism Template Demo" Height="400" Width="600">
<Grid>
<!-- 左侧导航栏 -->
<StackPanel Width="150" VerticalAlignment="Top" Margin="10" Spacing="10">
<Button Content="跳转到首页" Command="{Binding NavigateToHomeCommand}" Width="120" Height="40"/>
<Button Content="跳转到设置页" Command="{Binding NavigateToSettingCommand}" Width="120" Height="40"/>
</StackPanel>
<!-- Prism 导航区域(承载子页面) -->
<ContentControl prism:RegionManager.RegionName="MainContentRegion"
Margin="170,10,10,10" Background="#F5F5F5"/>
</Grid>
</Window>
3. 主窗口 ViewModel(用代码片段快速开发)
打开 ViewModels/MainWindowViewModel.cs,使用 Prism 代码片段生成导航命令:
步骤 1:生成导航服务注入代码
输入 prismnav → 按「Tab 键 2 次」,自动生成导航服务注入模板,修改后如下:
using Prism.Mvvm;
using Prism.Commands;
using Prism.Navigation;
namespace PrismTemplateDemo.ViewModels
{
public class MainWindowViewModel : BindableBase
{
// 导航服务(通过Prism依赖注入)
private readonly INavigationService _navigationService;
// 页面标题(用prismprop片段生成)
private string _title = "Prism Template Pack 示例";
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
// 构造函数注入导航服务
public MainWindowViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
// 初始化导航命令(用prismcmd片段生成)
NavigateToHomeCommand = new DelegateCommand(OnNavigateToHome);
NavigateToSettingCommand = new DelegateCommand(OnNavigateToSetting);
}
// 跳转到首页命令
public ICommand NavigateToHomeCommand { get; }
private void OnNavigateToHome()
{
// 导航到HomeView页面(后续创建)
_navigationService.NavigateAsync("HomeView");
}
// 跳转到设置页命令
public ICommand NavigateToSettingCommand { get; }
private void OnNavigateToSetting()
{
// 导航到SettingView页面(后续创建)
_navigationService.NavigateAsync("SettingView");
}
}
}
代码片段使用说明:
prismprop:输入后按 Tab 生成带属性通知的绑定属性(示例中 Title 属性);
prismcmd:输入后按 Tab 生成无参数 DelegateCommand(示例中两个导航命令);
prismnav:输入后按 Tab 生成导航服务注入模板。
三、步骤 2:用「Prism Module」创建子模块
1. 新建模块项目
-
右键解决方案 →「添加」→「新建项目」→ 搜索「Prism Module」→ 选择模板。
-
配置模块信息:
-
项目名称:
PrismTemplateDemo.ModuleA -
框架:.NET 8
-
容器:DryIoc(与主应用一致)
-
模块名:ModuleA(默认)
-
-
点击「创建」,生成模块基础结构。
2. 模块内添加首页(HomeView)
-
在 ModuleA 项目中新建「Views」文件夹 → 添加「WPF 用户控件」→ 命名为
HomeView.xaml。 -
HomeView 布局:
<UserControl x:Class="PrismTemplateDemo.ModuleA.Views.HomeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="20">
<TextBlock Text="{Binding WelcomeMessage}" FontSize="24" Foreground="#2C3E50"/>
<Button Content="点击修改文本" Command="{Binding ChangeTextCommand}" Width="150" Height="40"/>
</StackPanel>
</Grid>
</UserControl>
3. 首页 ViewModel(用代码片段快速开发)
在 ModuleA 项目中新建「ViewModels」文件夹 → 添加 HomeViewModel.cs:
using Prism.Mvvm;
using Prism.Commands;
namespace PrismTemplateDemo.ModuleA.ViewModels
{
public class HomeViewModel : BindableBase
{
// 用prismprop生成欢迎文本属性
private string _welcomeMessage = "欢迎来到首页!";
public string WelcomeMessage
{
get => _welcomeMessage;
set => SetProperty(ref _welcomeMessage, value);
}
// 用prismcmd生成按钮命令
public ICommand ChangeTextCommand => new DelegateCommand(OnChangeText);
private void OnChangeText()
{
WelcomeMessage = "Prism Template Pack 代码片段真好用!";
}
}
}
4. 模块内添加设置页(SettingView)
重复上述步骤,在 ModuleA 中创建 Views/SettingView.xaml 和 ViewModels/SettingViewModel.cs:
SettingView.xaml
<UserControl x:Class="PrismTemplateDemo.ModuleA.Views.SettingView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<TextBlock Text="{Binding SettingMessage}" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</UserControl>
SettingViewModel.cs
using Prism.Mvvm;
namespace PrismTemplateDemo.ModuleA.ViewModels
{
public class SettingViewModel : BindableBase
{
// 用prismprop生成设置页文本
private string _settingMessage = "这是设置页面(ModuleA)";
public string SettingMessage
{
get => _settingMessage;
set => SetProperty(ref _settingMessage, value);
}
}
}
5. 配置模块加载(ModuleAModule.cs)
修改模块入口类,注册视图并初始化导航:
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;
using PrismTemplateDemo.ModuleA.Views;
namespace PrismTemplateDemo.ModuleA
{
public class ModuleAModule : IModule
{
// 注册模块内的视图(用于导航)
public void RegisterTypes(IContainerRegistry containerRegistry)
{
// 注册HomeView和SettingView到容器
containerRegistry.RegisterForNavigation<HomeView>();
containerRegistry.RegisterForNavigation<SettingView>();
}
// 模块初始化(默认导航到首页)
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve<IRegionManager>();
// 启动时默认在MainContentRegion显示HomeView
regionManager.RequestNavigate("MainContentRegion", "HomeView");
}
}
}
四、步骤 3:主应用集成模块
1. 引用模块项目
右键主应用 PrismTemplateDemo →「添加」→「项目引用」→ 勾选 PrismTemplateDemo.ModuleA。
2. 配置模块加载(App.xaml.cs)
修改主应用的引导类,添加模块加载逻辑:
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Modularity;
using PrismTemplateDemo.ModuleA;
using System.Windows;
namespace PrismTemplateDemo
{
public partial class App : PrismApplication
{
// 注册服务/视图
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// 主应用无需额外注册,模块已自行注册
}
// 创建主窗口
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
// 配置模块加载
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
// 添加ModuleA到模块目录
moduleCatalog.AddModule<ModuleAModule>();
base.ConfigureModuleCatalog(moduleCatalog);
}
}
}
五、运行效果
-
按 F5 启动应用,主窗口默认显示「首页」,文本为「欢迎来到首页!」;
-
点击首页的「点击修改文本」按钮,文本变为「Prism Template Pack 代码片段真好用!」;
-
点击左侧「跳转到设置页」按钮,内容区域切换为设置页,显示「这是设置页面(ModuleA)」;
-
点击「跳转到首页」按钮,内容区域切回首页。
核心知识点总结
-
模板优势:Prism Template Pack 自动生成 Prism 核心结构(如 PrismApplication 继承、容器配置),无需手动编写;
-
代码片段效率 :
prismprop/prismcmd/prismnav等片段省去重复编写属性通知、命令、导航代码的工作量; -
模块化开发:Prism Module 模板标准化模块结构,模块可独立开发、插拔式集成到主应用。
此示例覆盖了 Prism Template Pack 的核心用法:空白应用模板、模块模板、代码片段,可直接作为 Prism WPF 项目的基础模板扩展。