CompactGUI MVVM模式实现:CommunityToolkit.Mvvm在VB.NET中的应用
CompactGUI是一个利用Windows 10/11 API透明压缩游戏和程序的工具,它采用了现代化的MVVM架构模式,通过CommunityToolkit.Mvvm库在VB.NET项目中实现了清晰的关注点分离。本文将深入解析CompactGUI如何运用MVVM模式和CommunityToolkit.Mvvm来构建高效的用户界面。
🏗️ MVVM架构在CompactGUI中的应用
CompactGUI的整个项目结构严格遵循MVVM模式,将界面逻辑、业务逻辑和数据模型清晰地分离开来:
ViewModels层:CompactGUI/ViewModels/ 包含了所有视图模型:
- MainWindowViewModel.vb - 主窗口视图模型
- HomeViewModel.vb - 主页视图模型
- SettingsViewModel.vb - 设置视图模型
- DatabaseViewModel.vb - 数据库视图模型
- WatcherViewModel.vb - 文件夹监控视图模型
Models层:CompactGUI/Models/ 定义了数据结构和业务对象:
- CompressableFolder.vb - 可压缩文件夹模型
- CompressionOptions.vb - 压缩选项模型
- SteamACFResult.vb - Steam解析结果模型
Views层:CompactGUI/Views/ 包含了所有XAML界面文件:
- MainWindow.xaml - 主窗口界面
- HomePage.xaml - 主页界面
- SettingsPage.xaml - 设置页面界面
🔧 CommunityToolkit.Mvvm核心功能应用
ObservableObject和ObservableProperty
在MainWindowViewModel.vb中,我们可以看到CommunityToolkit.Mvvm的典型应用:
Partial Public Class MainWindowViewModel : Inherits ObservableRecipient
<ObservableProperty>
Private _BackgroundImage As BitmapImage
通过[ObservableProperty]属性,编译器会自动生成完整的属性实现,包括属性更改通知。
RelayCommand命令绑定
CompactGUI大量使用RelayCommand来实现命令绑定:
<RelayCommand>
Private Sub NotifyIconOpen()
_windowService.ShowMainWindow()
End Sub
消息传递机制
项目还利用了CommunityToolkit.Mvvm的消息传递功能:
Imports CommunityToolkit.Mvvm.Messaging
Public Sub Receive(message As PropertyChangedMessage(Of CompressableFolder))
' 处理接收到的消息
End Sub
🎯 MVVM模式带来的优势
1. 清晰的职责分离
- View: 只负责UI呈现和用户交互
- ViewModel: 处理界面逻辑和命令绑定
- Model: 定义数据结构和业务规则
2. 更好的可测试性
由于业务逻辑与UI分离,可以轻松对ViewModel进行单元测试。
3. 维护性提升
当需要修改界面或业务逻辑时,可以在各自的层中进行,不会相互影响。
📁 核心ViewModel实现分析
MainWindowViewModel.vb
作为应用程序的主视图模型,它继承了ObservableRecipient,处理窗口生命周期、系统托盘操作等核心功能。
依赖注入和服务定位
CompactGUI通过构造函数注入依赖服务:
Public Sub New(windowService As IWindowService, watcher As Watcher.Watcher, settingsService As ISettingsService)
_watcher = watcher
_windowService = windowService
_settingsService = settingsService
End Sub
💡 在VB.NET项目中应用MVVM的最佳实践
1. 合理使用源生成器
利用[ObservableProperty]和[RelayCommand]等源生成器特性,可以大幅减少样板代码。
2. 消息驱动的组件通信
对于松散耦合的组件间通信,使用消息传递机制而不是直接引用。
3. 服务层抽象
将文件操作、网络请求等具体实现封装在服务层,ViewModel只关注业务逻辑。
🚀 性能优化建议
- 对于频繁更新的属性,考虑使用
[NotifyPropertyChangedFor]来优化通知性能 - 合理使用
[AlsoNotifyChangeFor]来处理相关属性的联动更新 - 在适当的场景下使用弱引用避免内存泄漏
🎉 总结
CompactGUI项目展示了如何在VB.NET中成功应用MVVM模式和CommunityToolkit.Mvvm库。通过这种架构,项目实现了:
- 高度可维护的代码结构
- 良好的可扩展性
- 优秀的测试支持
- 清晰的开发分工
通过学习和借鉴CompactGUI的MVVM实现方式,开发者可以在自己的VB.NET项目中构建更加健壮和可维护的应用程序架构。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



