分层类
Category 分类树及 CategoryBase、CategoryCollection、CategoryCollectionBase 的用法。
Category 表示一个可嵌套的分类节点。它继承自 CategoryBase<Category>,通过 Categories 属性持有子分类集合,常用于菜单、功能分组、导航分类、模块能力分组等树状结构。
类型关系
Category
具体分类节点,内置 CategoryCollection 子集合。
CategoryBase<TSelf>
分类节点基类,提供标题、描述、图标、排序、标签和资源本地化。
CategoryCollection
Category 的默认子分类集合,提供按名称快速新增分类的 Add 方法。
CategoryCollectionBase<TCategory>
分类集合基类,负责父节点维护和按 Ordinal 自动排序。
Category 同时也是层级节点,因此它继承了路径、完整路径、根节点判断和路径查找等能力。
创建分类树
来源:framework/Zongsoft.Core/test/Collections/CategoryTest.cs(节选;上下文见源文件)。
private static Category Initialize()
{
var root = new Category();
var file = root.Categories.Add("File");
var edit = root.Categories.Add("Edit");
var help = root.Categories.Add("Help");
file.Categories.Add("Open");
file.Categories.Add("Close");
file.Categories.Add("Save");
file.Categories.Add("SaveAs");
file.Categories.Add("Recents").Categories.AddRange(
new Category("Document-1"),
new Category("Document-2")
);
return root;
}无参构造的 Category 是根节点,名称为 /,完整路径也是 /。普通节点的名称不能包含 /、\、*、?、!、@ 等层级路径非法字符。
路径查找
Category 支持按层级路径查找节点。路径可以包含空白、相对路径、根路径和父级跳转。
来源:framework/Zongsoft.Core/test/Collections/CategoryTest.cs(节选;上下文见源文件)。
Find 返回匹配节点,找不到时返回 null。路径分段前后的空白会被忽略。
排序
CategoryBase<TSelf>.Ordinal 表示分类的排列顺序。向 CategoryCollectionBase<TCategory> 添加节点时,集合会按 Ordinal 插入到合适位置。
来源:framework/Zongsoft.Core/test/Collections/CategoryTest.cs(节选;上下文见源文件)。
测试随机设置 100 个节点的 Ordinal,随后逐项验证排序值不递减。上面的 Initialize 和 TestFind 属于同一测试夹具;复用代码时需要保留它们的关系。
本地化标题和描述
CategoryBase<TSelf> 可以接收 Zongsoft.Resources.IResource。当 Title 或 Description 没有显式设置时,会按完整路径和节点名称查找资源键。
Title 的资源键查找顺序包含:
{path}.Category.Title{path}.Category{path}.Title{path}{name}.Category.Title{name}.Category{name}.Title{name}
Description 的资源键查找顺序包含:
{path}.Category.Description{path}.Description{name}.Category.Description{name}.Description
显式设置 Title、Description、Icon、Tags 时,会触发属性变更通知。
相关资源
最后更新于