下面我将使用 MVVM 模式重构之前的激光直写控制软件,提供完整的工程结构。我们将使用 Prism 框架来实现 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
├── Commands/ # 自定义命令
│ └── AsyncRelayCommand.cs
└── App.xaml # 应用入口
二、核心代码实现
1. 应用入口 (App.xaml)
<prism:PrismApplication x:Class="LaserDirectWriteApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Prism.Wpf;component/Resources/PrismResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</prism:PrismApplication>
using Prism.Ioc;
using Prism.Unity;
using LaserDirectWriteApp.Views;
using LaserDirectWriteApp.ViewModels;
using LaserDirectWriteApp.Services;
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// 注册服务
containerRegistry.RegisterSingleton<ILaserService, LaserService>();
containerRegistry.RegisterSingleton<IMotionService, MotionService>();
// 注册视图和ViewModel
containerRegistry.RegisterForNavigation<MainWindow, MainViewModel>();
containerRegistry.RegisterForNavigation<LaserControlView, LaserControlViewModel>();
containerRegistry.RegisterForNavigation<MotionControlView, MotionControlViewModel>();
containerRegistry.RegisterForNavigation<PreviewView, PreviewViewModel>();
}
}
2. 主窗口视图模型 (MainViewModel.cs)
using Prism.Mvvm;
using Prism.Commands;
using LaserDirectWriteApp.Services;
public class MainViewModel : BindableBase
{
private readonly ILaserService _laserService;
private readonly IMotionService _motionService;
private string _statusMessage = "系统就绪";
public string StatusMessage
{
get => _statusMessage;
set => SetProperty(ref _statusMessage, value);
}
private bool _isConnected;
public bool IsConnected
{

最低0.47元/天 解锁文章
525

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



