# Mvvm-SampleWpf **Repository Path**: ten-ken/Mvvm-SampleWpf ## Basic Information - **Project Name**: Mvvm-SampleWpf - **Description**: CommunityToolkit.Mvvm在Wpf的实际使用案例 - **Primary Language**: C# - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-31 - **Last Updated**: 2026-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mvvm-SampleWpf WPF MVVM 模式示例项目 ## 项目简介 本项目是一个基于 WPF 的 MVVM 模式示例应用程序,展示了如何在 WPF 中使用 CommunityToolkit.Mvvm 框架实现数据绑定、命令绑定、数据验证以及组件间通信等功能。 ## 技术栈 - **.NET** - .NET Framework / .NET 6+ - **WPF** - Windows Presentation Foundation - **CommunityToolkit.Mvvm** - MVVM 工具包,提供 ObservableObject、RelayCommand、ObservableProperty 等特性 ## 功能特性 ### 1. MVVM 基础架构 - 基于 `ObservableObject` 的视图模型基类 - 使用 `[ObservableProperty]` 特性自动生成属性 - 使用 `[RelayCommand]` 特性实现命令绑定 ### 2. 数据验证 - 支持 `INotifyDataErrorInfo` 接口实现属性验证 - 内置验证特性:`[Required]`、`[MinLength]`、`[Range]`、`[RegularExpression]` - 自定义验证规则:`MyErrorValidationRule` - 自定义验证特性:`EmailAttribute` ### 3. 组件通信 (Messenger) - 使用 `CommunityToolkit.Mvvm.Messaging` 实现消息传递 - 支持 `PropertyChangedMessage` 和 `ValueChangedMessage` - 窗口间、视图模型间消息通信示例 ## 项目结构 ``` SampleWpf/ ├── Attributes/ # 自定义特性 │ └── EmailAttribute.cs # 邮箱验证特性 ├── Models/ # 数据模型 │ └── OsZbSupplierInfo.cs # 供应商信息模型 ├── ValidateRules/ # 验证规则 │ └── MyErrorValidationRule.cs ├── ViewModels/ # 视图模型 │ ├── BaseViewModel.cs # 基类 │ ├── SampleViewModel.cs # 示例视图模型 │ ├── SampleValidatorViewModel.cs # 验证示例 │ └── Notifies/ # 消息通信示例 │ ├── NotifyWindowViewModel.cs │ ├── SupplierFormViewModel.cs │ └── SupplierListViewModel.cs ├── Views/ # 视图 │ └── Notifies/ # 消息通信视图 │ ├── NotifyWindow.xaml │ ├── SupplierForm.xaml │ └── SupplierList.xaml ├── App.xaml # 应用程序入口 ├── MainWindow.xaml # 主窗口 └── commonStyle.xaml # 公共样式 ``` ## 示例代码 ### 视图模型定义 ```csharp public partial class SampleViewModel : ObservableObject { [ObservableProperty] private string? fullName; [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(UpdateNameCommand))] private bool isUpdate; [RelayCommand(CanExecute = nameof(IsUpdate))] private async Task UpdateNameAsync() { // 执行更新逻辑 } } ``` ### 数据验证 ```csharp public partial class SampleValidatorViewModel : ObservableValidator { [ObservableProperty] [NotifyDataErrorInfo] [Required(ErrorMessage = "姓名不能为空")] private string? name; [ObservableProperty] [NotifyDataErrorInfo] [Range(0, 160)] private int age; [ObservableProperty] [NotifyDataErrorInfo] [RegularExpression(@"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$")] private string? email; } ``` ### 消息通信 ```csharp // 发送消息 WeakReferenceMessenger.Default.Send(new ValueChangedMessage(supplierInfo)); // 接收消息 public partial class SupplierListViewModel : ObservableRecipient, IRecipient> { public void Receive(ValueChangedMessage message) { // 处理接收到的消息 } } ``` ## 使用说明 1. 克隆或下载本项目 2. 使用 Visual Studio 或 VS Code 打开 `SampleWpf.sln` 或 `SampleWpf.csproj` 3. 确保已安装 .NET SDK 和 WPF 开发环境 4. 编译并运行项目 ## 许可证 MIT License