用途
wpf-mvvm-scaffold 用于为 WPF 应用程序生成 MVVM 架构脚手架。它创建一套生产就绪的 MVVM 基础结构,包括 ViewModelBase、RelayCommand、INotifyPropertyChanged 实现以及依赖注入配置,帮助开发者跳过重复的样板代码搭建工作。
主要能力
- 生成带 INotifyPropertyChanged 的 ViewModelBase
- 创建 RelayCommand / AsyncRelayCommand 实现
- 使用 Microsoft.Extensions.DependencyInjection 配置依赖注入
- 生成导航服务模式
- 创建 messenger / 事件聚合器
- 支持设计时数据
- 为 ViewModel 生成单元测试脚手架
- 配置 MVVM toolkit 集成
输入参数
技能接受以下输入:
- projectPath(必填):WPF 项目路径
- projectName(必填):项目名称
- mvvmFramework:可选 custom、mvvm-toolkit、prism、caliburn,默认 mvvm-toolkit
- features:可选 navigation、messenger、validation、dialogs、design-time,默认 navigation 与 validation
- diFramework:可选 microsoft-di、autofac、ninject,默认 microsoft-di
- generateViewModels:初始要生成的 ViewModel 列表
输出内容
输出包含 success 状态、生成的文件列表(含路径与类型:base、viewmodel、service、command)以及所需的 NuGet 包列表。
生成的项目结构
生成的项目包含 App.xaml、App.xaml.cs、ViewModels(Base 目录下的 ViewModelBase.cs 与 RelayCommand.cs,以及 MainViewModel、ShellViewModel、SettingsViewModel)、Views、Services(INavigationService、NavigationService、IDialogService、DialogService)、Models 和 Infrastructure(Bootstrapper、ServiceLocator、Messenger)。
生成的代码示例
ViewModelBase 实现 INotifyPropertyChanged,提供 OnPropertyChanged 与 SetProperty 方法,并包含 IsInDesignMode 设计时支持。RelayCommand 与 AsyncRelayCommand 实现 ICommand,AsyncRelayCommand 通过 _isExecuting 标志防止重入。MainViewModel 使用 CommunityToolkit.Mvvm 的 ObservableProperty 与 RelayCommand 特性,通过构造函数注入 INavigationService 与 IDataService,并支持设计时数据加载。App.xaml.cs 使用 ServiceCollection 注册服务、ViewModel 与 View,并在 OnStartup 中解析 ShellView 与 ShellViewModel。NavigationService 实现 INavigationService,维护导航栈,支持 NavigateTo、GoBack 与 INavigationAware 回调。
依赖的 NuGet 包
- CommunityToolkit.Mvvm 8.2.2
- Microsoft.Extensions.DependencyInjection 8.0.0
最佳实践
- 保持 ViewModel 与 UI 无关,不引用 WPF 类型
- 对长时间运行的操作使用异步命令
- 实现 INotifyDataErrorInfo 进行验证
- 支持 Blend / VS 设计器的设计时数据
- 每个 View 对应一个 ViewModel
- 对 ViewModel 进行单元测试,模拟服务
适用场景
适用于需要快速搭建 WPF MVVM 项目基础架构的 .NET 桌面应用开发场景,尤其是希望统一采用依赖注入、导航服务与命令模式的团队项目。
限制
资料未提供该技能的具体收费、价格、平台限制或运行环境要求。