# 优化选择提示信息 - 完成报告 ## 优化目标 优化选择提示信息,在"已选择X个模型"后面添加节点名称,让用户更清楚当前操作的对象。 ## 实现方案 ### 1. 创建通用格式化函数 在 `LayerManagementViewModel.cs` 和 `ModelSettingsViewModel.cs` 中新增了 `FormatSelectionText` 方法: ```csharp /// /// 格式化选择状态文本,包含节点名称 /// /// 选择数量 /// 选择的项目集合 /// 单位名称(如"个模型"、"个节点") /// 最大显示名称数量 /// 最大总长度 /// 格式化后的选择状态文本 private string FormatSelectionText(int count, IEnumerable selectedItems = null, string unitName = "个模型", int maxDisplayCount = 3, int maxTotalLength = 80) ``` ### 2. 优化显示策略 - **单选时**: 显示完整节点名称(超过50字符时截断) - **多选时**: 显示前几个名称,超过一定长度或数量时用省略号 - **智能截断**: 避免信息过长影响UI显示 ### 3. 更新数据结构 扩展了 `SelectNodesResult` 类,增加了 `SelectedItems` 属性来保存选择的项目信息: ```csharp public class SelectNodesResult { public bool IsSuccess { get; set; } public int Count { get; set; } public List SelectedItems { get; set; } = new List(); public string ErrorMessage { get; set; } } ``` ### 4. 优化涉及的区域 #### LayerManagementViewModel.cs 优化点: 1. **节点选择区域**(第801行):选择节点时的状态显示 2. **楼层属性设置区域**(第2314行和第2372行):楼层属性相关的模型选择状态 3. **选择集保存区域**:选择集保存功能的选择状态显示 #### ModelSettingsViewModel.cs 优化点: 1. **模型选择状态显示**(第329行):物流属性设置相关的模型选择状态 ## 优化效果示例 ### 优化前: - "已选择1个模型" - "已选择5个模型" ### 优化后: - "已选择1个模型: 主楼-一层-墙体-W001" - "已选择2个模型: Wall_001, Door_002" - "已选择5个模型: Wall_001, Door_002, Window_003..." ### 长名称处理: - 单选超长: "已选择1个模型: 这是一个非常长的节点名称包含很多详细信息..." - 多选智能截断: "已选择8个模型: Node1, Node2, Very_Long_Node_Name..." ## 技术细节 ### 1. 线程安全处理 - 业务逻辑在后台线程执行,避免UI阻塞 - 使用 `UIStateManager.ExecuteUIUpdateAsync()` 确保UI更新在主线程 ### 2. 错误处理 - 保持原有的错误处理逻辑 - 当获取节点信息失败时,仍显示基本的数量信息 ### 3. 性能优化 - 使用 `Take(maxDisplayCount + 1)` 限制处理的项目数量 - 智能截断避免过长字符串的处理 ## 代码兼容性 - 保持向后兼容,不影响现有功能 - 编译测试通过,无破坏性更改 - 遵循现有的错误处理和日志记录模式 ## 结论 成功实现了选择提示信息的优化,用户现在可以清楚地看到: 1. 选择了多少个对象 2. 选择的具体对象名称 3. 对于多选情况的智能显示 这大大提升了用户体验,让用户能够更清楚地了解当前的操作对象。