使用 CommunityToolkit.Mvvm 库重新设计激光直写控制软件的框架,展示现代 MVVM 实现方式。
一、项目结构
LaserDirectWriteApp/
├── Models/
│ ├── LaserParameters.cs
│ ├── MotionParameters.cs
│ └── SystemStatus.cs
├── ViewModels/
│ ├── MainViewModel.cs
│ ├── LaserControlViewModel.cs
│ ├── MotionControlViewModel.cs
│ └── PreviewViewModel.cs
├── Views/
│ ├── MainWindow.xaml
│ ├── LaserControlView.xaml
│ ├── MotionControlView.xaml
│ └── PreviewView.xaml
├── Services/
│ ├── ILaserService.cs
│ ├── IMotionService.cs
│ ├── LaserService.cs
│ └── MotionService.cs
├── Converters/
│ └── BooleanToStatusConverter.cs
└── App.xaml
二、核心实现
1. 安装必要包
dotnet add package CommunityToolkit.Mvvm
dotnet add package Microsoft.Extensions.DependencyInjection
2. 应用入口 (App.xaml.cs)
using Microsoft.Extensions.DependencyInjection;
using CommunityToolkit.Mvvm.DependencyInjection;
public partial class App : Application
{
public App()
{
// 配置依赖注入
Ioc.Default.ConfigureServices(
new ServiceCollection()
.AddSingleton<ILaserService, LaserService>()
.AddSingleton<IMotionService, MotionService>()
.AddTransient<MainViewModel>()
.AddTransient<LaserControlViewModel>()
.AddTransient<MotionControlViewModel>()
.AddTransient<PreviewViewModel>()
.BuildServiceProvider());
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var mainWindow = new MainWindow
{
DataContext = Ioc.Default.GetRequiredService<MainViewModel>()
};
mainWindow.Show();
}
}
3. 主视图模型 (MainViewModel.cs)
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
public partial class MainViewModel : ObservableObject
{
private readonly ILaserService _laserService;
private readonly IMotionService _motionService;
[ObservableProperty]
pr

最低0.47元/天 解锁文章
7059

被折叠的 条评论
为什么被折叠?



