WPF 上位机 AI 开发流程
这份文档用于指导你把 WPF 上位机项目拆成 AI 能稳定处理的任务。
重点不是让用户一开始就说清楚 XAML、ViewModel、Command、绑定字段,而是让用户先描述业务目标、界面现象和期望效果,再让 AI 反推页面结构、控件、绑定、命令、服务和验证点。
1. 一个核心原则:用户说目标,AI 拆细节
实际使用时,用户通常不会这样说:
请修改 MainWindow.xaml 和 MainViewModel.cs,把 ConnectCommand 改成 DisconnectCommand,并同步更新绑定字段。用户更可能这样说:
我想把主界面的连接按钮改成关闭按钮。
连接成功后显示关闭,点击关闭后断开设备,再恢复成连接。这才是正常使用方式。
AI 应该先根据这个目标判断:
- 这属于新页面、页面修改、状态逻辑修改,还是通信流程修改。
- 可能涉及哪些页面区域、按钮、状态字段和命令。
- 可能需要哪些文件或截图。
- 哪些信息不够,需要继续追问。
- 怎样做最小修改和回归验证。
用户不需要一开始就准确知道文件名、控件名、绑定字段和 Command 名称。知道当然更好,不知道也可以先描述目标。
2. 为什么推荐 WPF
WPF 比 WinForm 更适合让 AI 辅助开发,主要原因有:
- XAML 页面结构是文本,AI 更容易阅读和修改。
- 页面布局、控件、绑定关系比较清晰,适合做局部修改。
- 数据绑定适合把界面和逻辑分开,减少代码互相缠绕。
- MVVM 模式适合把任务拆成 View、ViewModel、Model、Service。
- 复杂界面、状态刷新、参数配置、表格和曲线更容易组织。
WinForm 也可以使用 AI 辅助,但复杂布局和设计器生成代码更容易被误改。对于新项目,优先建议 WPF。
3. 推荐项目结构
项目结构不是第一步。
第一步应该先把零散需求整理成第一版需求方案,确认软件要解决什么问题、谁使用、在哪里使用、大概有哪些核心功能。只有第一版方案基本清楚后,才适合继续细化页面、通信、数据和项目结构。
如果项目还没有明确用户、现场、痛点、成功标准和非目标,先回到 10-问题定义与用户场景.md。如果需求方案已经确认,但准备进入技术设计或代码实现,先用 12-AI开发质量门.md 做一次检查。
当需求已经明确后,新项目可以按下面结构组织:
项目名/
├─ Models/
├─ ViewModels/
├─ Views/
├─ Services/
├─ Communication/
├─ Storage/
├─ Utils/
├─ Logs/
└─ Configs/各目录职责:
| 目录 | 职责 |
|---|---|
| Models | 数据模型,例如测试结果、设备状态、报警记录 |
| ViewModels | 页面状态、按钮命令、数据绑定、业务协调 |
| Views | XAML 页面和窗口 |
| Services | 业务服务,例如测试流程、报警服务、配置服务 |
| Communication | 串口、TCP、协议解析、重连、心跳 |
| Storage | SQLite、CSV、Excel、数据查询和导出 |
| Utils | 通用工具,例如 CRC、时间格式、文件工具 |
| Logs | 日志写入、日志查看、日志清理 |
| Configs | 参数配置、默认配置、导入导出 |
4. AI 开发标准流程
推荐按这个顺序让 AI 处理:
- 先把零散需求整理成完整需求文档。
- 再让 AI 根据需求文档拆业务流程、页面、通信、数据、日志、报警和验收标准。
- 再根据模块边界选择项目结构和技术框架。
- 再设计页面布局和交互流程。
- 再让 AI 推导需要的 Model、ViewModel、Service、Command 和绑定字段。
- 再设计通信逻辑和协议解析。
- 再设计数据存储和日志。
- 重要技术选择用
22-架构决策ADR模板.md记录理由。 - 最后生成测试清单和验收标准。
不要一开始就说“帮我写一个完整上位机”。更好的说法是:
请先不要写代码。下面是我零散整理的上位机需求,请先帮我整理成一份第一版需求方案。
请输出:
1. 项目目标。
2. 使用场景和操作流程。
3. 页面清单和每个页面的功能。
4. 通信需求。
5. 数据保存需求。
6. 日志、报警和异常处理。
7. 第一阶段最小可运行版本。
8. 还缺哪些关键信息。
零散需求如下:
【粘贴你的需求】需求方案确认后,再让 AI 继续:
请根据上面的需求方案,继续帮我设计 WPF 上位机的技术方案。
请输出:
1. 推荐项目结构。
2. 页面清单和每个页面的区域布局。
3. 每个页面需要显示的数据和操作动作。
4. AI 建议的控件、状态字段、按钮命令和绑定关系。
5. Model、ViewModel、Service、通信模块、数据存储模块的职责。
6. 开发顺序和测试验收点。
先给方案,不要直接写完整代码。5. 新建页面流程
新建页面时,用户不需要先列出完整控件清单、绑定字段和按钮命令。
用户先提供这些业务信息即可:
| 用户需要说明 | 示例 |
|---|---|
| 页面用途 | 参数配置页、实时数据页、报警记录页 |
| 谁使用 | 操作员、调试工程师、测试人员 |
| 主要任务 | 设置参数、查看曲线、查询历史、确认报警 |
| 需要看到什么 | 设备状态、实时数值、测试结果、报警信息 |
| 需要操作什么 | 连接设备、开始测试、保存参数、导出数据 |
| 异常怎么提示 | 连接失败、参数错误、保存失败、数据超限 |
| 验收标准 | 怎么判断这个页面可用 |
AI 应该输出这些技术细节:
| AI 应该设计 | 说明 |
|---|---|
| 页面区域划分 | 顶部状态区、左侧参数区、中间数据区、底部日志区 |
| 控件建议 | TextBox、ComboBox、Button、DataGrid、Chart、ListBox 等 |
| 状态字段 | IsConnected、CurrentStatus、AlarmCount、TestResult 等 |
| 按钮命令 | Connect、Disconnect、Start、Stop、Save、Export 等 |
| 数据绑定 | 哪些显示内容来自哪些状态字段或集合 |
| 服务依赖 | 通信服务、配置服务、数据服务、日志服务 |
| 验收点 | 页面能打开、状态能刷新、按钮可用、异常有提示 |
发给 AI 的模板:
请你作为 C# WPF 上位机界面设计助手,帮我设计一个新页面。
我先用业务语言描述需求,不确定具体控件、绑定字段和 Command 名称,请你帮我设计。
页面用途:
使用人员:
主要操作流程:
需要显示的信息:
需要执行的操作:
异常提示要求:
验收标准:
请先输出设计方案,不要直接写完整代码。
请输出:
1. 页面区域布局。
2. 建议使用的控件。
3. 需要的状态字段。
4. 需要的按钮命令。
5. ViewModel 职责。
6. 可能依赖的 Service。
7. 需要我补充确认的问题。
8. 验收检查点。6. 修改页面流程
修改已有页面时,不要一开始就要求用户准确提供 XAML 和 ViewModel。
先让用户描述:
- 想改哪个页面或哪个区域。
- 当前是什么样。
- 希望改成什么样。
- 哪些功能不要受影响。
- 是否有当前界面截图或运行截图。
AI 的第一步不是直接改代码,而是先判断:
- 这可能涉及 UI、状态字段、按钮命令、业务服务还是通信流程。
- 需要查看哪些文件或截图。
- 是否可以只做局部修改。
- 修改后要验证哪些点。
普通使用模板:
我想修改一个已有 WPF 上位机页面。
请先不要写代码,也不要重写整个页面。
修改目标:
【例如:主界面连接成功后,把“连接”按钮变成“关闭”,点击关闭后断开设备】
当前现象:
【现在界面和操作是什么样】
期望效果:
【希望改完后是什么样】
不希望影响:
【例如:不要影响数据采集、日志显示、参数保存】
我暂时不确定具体要改哪个 XAML、ViewModel 或 Command。
请先输出:
1. 这个修改可能涉及哪些页面区域、状态字段、按钮命令和服务。
2. 需要我补充哪些截图、项目结构或代码文件。
3. 最小修改方案。
4. 风险点。
5. 回归验证清单。进阶补充模板:
下面是 AI 要求我补充的相关文件或片段。
请只针对本次目标做最小修改,不要重写整个页面,不要顺手重构。
修改目标:
【再次写清楚目标】
相关页面代码:
【粘贴 XAML 或页面代码】
相关逻辑代码:
【粘贴 ViewModel / 事件处理 / Service 片段】
请输出:
1. 当前逻辑判断。
2. 最小修改点。
3. 每处修改原因。
4. 可能影响范围。
5. 修改后验证步骤。修改页面时的注意事项:
- 先说目标和现象,不要强行猜文件名。
- 信息不够时,让 AI 反问需要哪些材料。
- 不要让 AI 重写整个页面。
- 不要让 AI 顺手改样式体系。
- 修改按钮状态时,要确认连接、断开、异常、重连等状态。
- 修改数据显示时,要确认数据来源、刷新频率和异常显示。
7. MVVM 协作模板
这一节是进阶内容。普通用户不需要一开始就填写完整 Model、ViewModel、Command。可以先用前面的业务目标模板,让 AI 反推这些内容。
Model 设计
请根据下面业务对象设计 Model。只设计数据字段,不写界面逻辑。
业务对象:
这个对象表示什么:
需要显示哪些信息:
需要保存哪些信息:
哪些字段需要校验:
请你推导字段名、字段类型和校验规则。ViewModel 设计
请根据下面页面业务需求设计 ViewModel。
页面用途:
需要显示的状态:
需要操作的动作:
涉及的数据列表:
需要调用的服务:
异常提示方式:
请你推导属性清单、命令清单、方法清单和验证点。Command 设计
请根据下面按钮业务目标设计 WPF Command。
按钮业务目标:
点击前需要满足什么条件:
点击后执行什么动作:
成功后界面怎么变化:
失败后怎么提示:
是否可能耗时:
请你推导 Command 名称、CanExecute 条件、执行流程、异常处理和验证点。Service 设计
请把下面业务逻辑设计成 Service,不要写在 ViewModel 里。
业务目标:
输入信息:
输出结果:
异常情况:
需要记录哪些日志:
需要验证哪些场景:
请你推导 Service 职责、方法清单、依赖关系和测试点。8. 常见页面模板
| 页面 | 用户通常怎么描述 | AI 应该补齐什么 | 验收点 |
|---|---|---|---|
| 主界面 | 我要看到设备状态,能连接、开始、停止 | 状态区、按钮区、结果区、日志区、连接状态字段 | 能连接、能断开、状态刷新正常 |
| 参数配置页 | 我要设置通信参数和测试参数 | 参数分组、输入控件、保存/加载命令、校验规则 | 能保存、能加载、错误参数有提示 |
| 实时数据页 | 我要看实时数值和曲线 | 数值卡片、表格、曲线、刷新策略 | 数据刷新不卡顿、显示正确 |
| 历史数据页 | 我要按时间查询和导出结果 | 查询条件、结果表格、导出命令 | 查询正确、导出文件可打开 |
| 报警记录页 | 我要看报警、确认报警、查历史报警 | 报警列表、等级、确认状态、恢复状态 | 报警能记录、能查询、状态正确 |
| 日志窗口 | 我要看通信日志和错误日志 | 日志等级、筛选、清空、保存 | 日志能追加、能清空、能保存 |
| 测试流程页 | 我要按步骤执行测试并显示结果 | 步骤列表、当前步骤、进度、结果判定 | 步骤状态正确、异常能停止或重试 |