Loading...
Loading...
Compare original and translation side by side
// 1. Install NuGet packages
// Install-Package Syncfusion.Blazor.Navigations -Version 26.1.35
// Install-Package Syncfusion.Blazor.Themes -Version 26.1.35
// 2. Add to _Imports.razor
@using Syncfusion.Blazor
@using Syncfusion.Blazor.Navigations
// 3. Register service in Program.cs
builder.Services.AddSyncfusionBlazor();
// 4. Add CSS theme to Index.html or _Layout.cshtml
<link href="_content/Syncfusion.Blazor.Themes/bootstrap5.css" rel="stylesheet" />// 1. 安装NuGet包
// Install-Package Syncfusion.Blazor.Navigations -Version 26.1.35
// Install-Package Syncfusion.Blazor.Themes -Version 26.1.35
// 2. 添加到_Imports.razor
@using Syncfusion.Blazor
@using Syncfusion.Blazor.Navigations
// 3. 在Program.cs中注册服务
builder.Services.AddSyncfusionBlazor();
// 4. 在Index.html或_Layout.cshtml中添加CSS主题
<link href="_content/Syncfusion.Blazor.Themes/bootstrap5.css" rel="stylesheet" />@using Syncfusion.Blazor.Navigations
<SfTreeView TValue="MailItem">
<TreeViewFieldsSettings TValue="MailItem"
Id="Id"
Text="FolderName"
Child="Children"
DataSource="@MyFolder">
</TreeViewFieldsSettings>
<TreeViewEvents TValue="MailItem" NodeSelected="OnNodeSelected"></TreeViewEvents>
</SfTreeView>
@code {
public class MailItem
{
public string? Id { get; set; }
public string? FolderName { get; set; }
public List<MailItem>? Children { get; set; }
}
void OnNodeSelected(NodeSelectEventArgs args)
{
Console.WriteLine($"Selected: {args.NodeData.Text}");
}
List<MailItem> MyFolder = new()
{
new MailItem { Id = "1", FolderName = "Inbox", Children = new() },
new MailItem { Id = "2", FolderName = "Sent", Children = new() }
};
}@using Syncfusion.Blazor.Navigations
<SfTreeView TValue="MailItem">
<TreeViewFieldsSettings TValue="MailItem"
Id="Id"
Text="FolderName"
Child="Children"
DataSource="@MyFolder">
</TreeViewFieldsSettings>
<TreeViewEvents TValue="MailItem" NodeSelected="OnNodeSelected"></TreeViewEvents>
</SfTreeView>
@code {
public class MailItem
{
public string? Id { get; set; }
public string? FolderName { get; set; }
public List<MailItem>? Children { get; set; }
}
void OnNodeSelected(NodeSelectEventArgs args)
{
Console.WriteLine($"Selected: {args.NodeData.Text}");
}
List<MailItem> MyFolder = new()
{
new MailItem { Id = "1", FolderName = "Inbox", Children = new() },
new MailItem { Id = "2", FolderName = "Sent", Children = new() }
};
}| Property | Type | Default | Purpose |
|---|---|---|---|
| bool | false | Enable/disable drag-drop hierarchy reordering |
| bool | false | Allow double-click node renaming |
| bool | false | Enable Ctrl+Click multi-selection |
| bool | false | Display checkboxes for each node |
| bool | true | Auto-check/uncheck children when parent checked |
| bool | false | Persist expanded/selected/checked state to localStorage |
| bool | false | Virtual scrolling for 1000+ nodes (requires Height) |
| string[] | Empty | Initially expanded node IDs (2-way bindable) |
| string[] | Empty | Selected node IDs (2-way bindable) |
| string[] | Empty | Checked node IDs (2-way bindable) |
| bool | true | Load children only when node expands |
| ExpandAction | Click | Trigger expand on Click/DoubleClick/None |
| string | "auto" | Fixed height (required for virtualization) |
| 属性 | 类型 | 默认值 | 用途 |
|---|---|---|---|
| bool | false | 启用/禁用拖拽重排序层级结构 |
| bool | false | 允许双击节点重命名 |
| bool | false | 启用Ctrl+点击多选 |
| bool | false | 为每个节点显示复选框 |
| bool | true | 当父节点被勾选时自动勾选/取消勾选子节点 |
| bool | false | 将展开/选中/勾选状态持久化到localStorage |
| bool | false | 为1000+节点提供虚拟滚动(需要设置Height) |
| string[] | 空数组 | 初始展开的节点ID(支持双向绑定) |
| string[] | 空数组 | 选中的节点ID(支持双向绑定) |
| string[] | 空数组 | 勾选的节点ID(支持双向绑定) |
| bool | true | 仅当节点展开时加载子节点 |
| ExpandAction | Click | 触发展开的方式:点击/双击/无 |
| string | "auto" | 固定高度(虚拟化功能必需) |
| Method | Purpose |
|---|---|
| Expand all nodes |
| Expand specific nodes by ID |
| Collapse all nodes |
| Collapse specific nodes |
| Enter edit mode for a node |
| Get all tree data |
| Get specific node data by ID |
| Scroll to make node visible |
| Check all checkboxes |
| Uncheck all checkboxes |
| Clear all state (selection, expand, check) |
| 方法 | 用途 |
|---|---|
| 展开所有节点 |
| 根据ID展开指定节点 |
| 折叠所有节点 |
| 折叠指定节点 |
| 进入指定节点的编辑模式 |
| 获取所有树形数据 |
| 根据ID获取指定节点数据 |
| 滚动到节点使其可见 |
| 勾选所有复选框 |
| 取消勾选所有复选框 |
| 清除所有状态(选择、展开、勾选) |
| Event | Fires When | Common Uses |
|---|---|---|
| TreeView initialized | Post-initialization setup, load preferences |
| Data binding complete | Auto-expand default nodes, validate data |
| Node left-clicked | Load node details, enable actions |
| Node clicked | Distinguish single vs double-click |
| Node expanded | Load child nodes (load-on-demand) |
| Node collapsed | Optional: Unload children from memory |
| Before edit mode | Validate permissions, prevent edits |
| Edit confirmed | Validate new text, save to server |
| Drag begins | Prevent dragging restricted nodes |
| Drop completed | Update hierarchy in server |
| Before checkbox changes | Prevent checking restricted nodes |
| Checkbox changed | Update related data, trigger actions |
| Data source updated | Re-apply filters, refresh calculations |
| Action fails (API error) | Recover from errors, show notifications |
| Key pressed | Implement keyboard shortcuts (Delete, F2, etc) |
| 事件 | 触发时机 | 常见用途 |
|---|---|---|
| TreeView初始化完成后 | 初始化后设置、加载偏好设置 |
| 数据绑定完成后 | 自动展开默认节点、验证数据 |
| 节点被左键点击时 | 加载节点详情、启用相关操作 |
| 节点被点击时 | 区分单击与双击操作 |
| 节点被展开时 | 加载子节点(按需加载) |
| 节点被折叠时 | 可选:从内存中卸载子节点 |
| 进入编辑模式前 | 验证权限、阻止编辑 |
| 编辑确认后 | 验证新文本、保存到服务器 |
| 拖拽开始时 | 阻止拖拽受限制的节点 |
| 拖拽完成时 | 更新服务器端的层级结构 |
| 复选框状态改变前 | 阻止勾选受限制的节点 |
| 复选框状态改变后 | 更新相关数据、触发操作 |
| 数据源更新后 | 重新应用筛选、刷新计算结果 |
| 操作失败时(API错误) | 错误恢复、显示通知 |
| 按键被按下时 | 实现键盘快捷键(删除、F2等) |
<SfTreeView TValue="Item" @bind-SelectedNodes="@SelectedIds">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeSelected="OnSelect"></TreeViewEvents>
</SfTreeView>
@code {
string[] SelectedIds = Array.Empty<string>();
void OnSelect(NodeSelectEventArgs args) => Console.WriteLine(args.NodeData.Text);
}<SfTreeView TValue="Item" @bind-SelectedNodes="@SelectedIds">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeSelected="OnSelect"></TreeViewEvents>
</SfTreeView>
@code {
string[] SelectedIds = Array.Empty<string>();
void OnSelect(NodeSelectEventArgs args) => Console.WriteLine(args.NodeData.Text);
}<SfTreeView TValue="Item" AllowMultiSelection="true" @bind-SelectedNodes="@SelectedIds">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView><SfTreeView TValue="Item" AllowMultiSelection="true" @bind-SelectedNodes="@SelectedIds">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView>void OnNodeExpanded(NodeExpandEventArgs args)
{
if (args.NodeData.HasChild && args.NodeData.Child == null)
{
// Load children from API
args.NodeData.Child = await FetchChildren(args.NodeData.Id);
}
}void OnNodeExpanded(NodeExpandEventArgs args)
{
if (args.NodeData.HasChild && args.NodeData.Child == null)
{
// 从API加载子节点
args.NodeData.Child = await FetchChildren(args.NodeData.Id);
}
}<SfTreeView TValue="Item" AllowDragAndDrop="true">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeDropped="OnDropped"></TreeViewEvents>
</SfTreeView>
void OnDropped(DragAndDropEventArgs args) => UpdateHierarchy(args);<SfTreeView TValue="Item" AllowDragAndDrop="true">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeDropped="OnDropped"></TreeViewEvents>
</SfTreeView>
void OnDropped(DragAndDropEventArgs args) => UpdateHierarchy(args);<SfTreeView TValue="Item" AllowEditing="true" DoubleClickAction="DoubleClickAction.Edit">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeEdited="OnEdited"></TreeViewEvents>
</SfTreeView>
void OnEdited(NodeEditEventArgs args) => SaveChanges(args.NodeData);<SfTreeView TValue="Item" AllowEditing="true" DoubleClickAction="DoubleClickAction.Edit">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeEdited="OnEdited"></TreeViewEvents>
</SfTreeView>
void OnEdited(NodeEditEventArgs args) => SaveChanges(args.NodeData);<SfTreeView TValue="Item" AllowCheckBoxes="true" ChildChecking="ChildCheckState.Both">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView>
var checked = treeRef.GetAllCheckedNodes();<SfTreeView TValue="Item" AllowCheckBoxes="true" ChildChecking="ChildCheckState.Both">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView>
var checked = treeRef.GetAllCheckedNodes();