--- applyTo: "**/*ViewModel.cs,**/*.xaml,MainShell/Converter/**/*.cs,MainShell/Home/**/*.cs,MainShell/ParaSetting/**/*.cs,MainShell/DeviceMaintance/**/*.cs,MainShell/PageCalib/**/*.cs,MainShell/Manual/**/*.cs" --- # WPF and MVVM Instructions ## Framework This repository uses WPF with Stylet. ## 中文说明 本项目 WPF 框架使用 Stylet,MVVM 相关代码必须遵循 Stylet 的约定。 ## ViewModel Rules - ViewModel classes should inherit from `Screen` or `PropertyChangedBase` - Follow Stylet naming convention: - XxxView ? XxxViewModel - Do not introduce patterns that conflict with Stylet conventions ## 中文说明 ViewModel 规则: - ViewModel 继承 `Screen` 或 `PropertyChangedBase` - View 和 ViewModel 按命名约定自动绑定 - 不要引入与 Stylet 冲突的 MVVM 模式 ## State Management - Prefer bindable state objects to hold UI state - Do not scatter many unrelated primitive bindable properties if a cohesive state model is more suitable - Distinguish device input state and output state clearly ## 中文说明 状态管理建议: - 优先使用可绑定状态对象统一承载界面状态 - 如果多个属性本质上属于一个状态域,不要分散定义在 ViewModel 中 - 输入状态和输出状态要明确分离 ## IoC Rules - IoC registrations belong in `StartBootstrapper.ConfigureIoC()` - Singleton services should use `[Singleton]` or be registered as singleton in IoC - New services must be registered consistently with existing project patterns ## 中文说明 IoC 规则: - IoC 注册统一在 `StartBootstrapper.ConfigureIoC()` 中完成 - 单例服务通过 `[Singleton]` 或容器单例注册 - 新增服务必须遵循现有注册风格 ## XAML Rules - Do not manually implement `InitializeComponent` - Do not work around WPF compilation issues by writing manual code-behind loaders - Fix page compilation through project file and proper WPF item setup - Value converters should be placed in `Converter/` and named `XxxConverter` ## 中文说明 XAML 规则: - 不要手写 `InitializeComponent` - 不要通过 code-behind 手工加载页面绕过编译问题 - 页面编译问题应通过 csproj 或 WPF 配置修复 - 转换器放在 `Converter/` 下,并使用 `XxxConverter` 命名 ## Language Resource Rules Project language resources are loaded from: - `Language/MaxwellFramework_{lang}.xaml` - `Language/MXJM_{lang}.xaml` Keep generated UI code compatible with the existing localization mechanism. ## 中文说明 多语言资源加载遵循现有机制: - 平台语言包:`MaxwellFramework_{lang}.xaml` - 项目语言包:`MXJM_{lang}.xaml` 生成 UI 代码时不要破坏现有多语言机制。