NavisworksTransport/doc/bugfixes/优化选择提示信息_完成报告.md

3.3 KiB
Raw Blame History

优化选择提示信息 - 完成报告

优化目标

优化选择提示信息,在"已选择X个模型"后面添加节点名称,让用户更清楚当前操作的对象。

实现方案

1. 创建通用格式化函数

LayerManagementViewModel.csModelSettingsViewModel.cs 中新增了 FormatSelectionText 方法:

/// <summary>
/// 格式化选择状态文本,包含节点名称
/// </summary>
/// <param name="count">选择数量</param>
/// <param name="selectedItems">选择的项目集合</param>
/// <param name="unitName">单位名称(如"个模型"、"个节点"</param>
/// <param name="maxDisplayCount">最大显示名称数量</param>
/// <param name="maxTotalLength">最大总长度</param>
/// <returns>格式化后的选择状态文本</returns>
private string FormatSelectionText(int count, IEnumerable<ModelItem> selectedItems = null, 
    string unitName = "个模型", int maxDisplayCount = 3, int maxTotalLength = 80)

2. 优化显示策略

  • 单选时: 显示完整节点名称超过50字符时截断
  • 多选时: 显示前几个名称,超过一定长度或数量时用省略号
  • 智能截断: 避免信息过长影响UI显示

3. 更新数据结构

扩展了 SelectNodesResult 类,增加了 SelectedItems 属性来保存选择的项目信息:

public class SelectNodesResult
{
    public bool IsSuccess { get; set; }
    public int Count { get; set; }
    public List<ModelItem> SelectedItems { get; set; } = new List<ModelItem>();
    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. 对于多选情况的智能显示

这大大提升了用户体验,让用户能够更清楚地了解当前的操作对象。