syncfusion-blazor-treeview について
Syncfusion TreeView で階層データを表示・操作する Blazor 開発者向けの実装ガイドです。データバインド、ノード選択と編集、ドラッグ&ドロップ、検索、大規模データの仮想化を扱います。
主な機能
- 01ローカルまたはリモートデータのバインド
- 02単一・複数・チェックボックス選択
- 03ノード編集とドラッグ&ドロップによる並べ替え
- 04検索、フィルタリング、オンデマンド読み込み
- 05大規模データの仮想スクロール
活用シーン
- 01ドラッグ&ドロップ対応のファイルブラウザー
- 02組織図や階層ナビゲーションの作成
- 03カテゴリーフィルターや権限画面の構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ syncfusion/ blazor-ui-components-skills --skill syncfusion-blazor-treeviewインストール後、Claude Code で/syncfusion-blazor-treeviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-features.mdauthorization-authentication.mdcheckbox-features.mdcustomization-styling.mddata-binding.mdevents-handling.mdexpand-collapse-actions.mdgetting-started.mdnavigation-patterns.mdnode-editing.mdnode-selection.md詳細
Syncfusion Blazor TreeView コンポーネントの実装
Blazor TreeView コンポーネントは、階層データを展開/折りたたみ可能なツリー構造で表示します。ローカルおよびリモートのデータバインディング、単一選択と複数選択、編集、チェックボックス、ドラッグ&ドロップによる並べ替え、大規模なデータセット向けの仮想化、フィルタリング、包括的なイベント処理に対応しています。
📋 目次
このスキルを使用する場面
次のような場合に TreeView コンポーネントを使用します。
- 階層データの表示:展開/折りたたみ可能なノードを含むツリー構造で表示する
- 単一選択:ユーザーがツリーから 1 つのノードを選択できるようにする
- 複数選択:Ctrl+クリックと Shift+クリックを使って、複数のツリーノードを選択できるようにする
- チェックボックス選択:親子の状態を自動的に管理するチェックボックスベースの複数選択を提供する
- ノードの編集:ノードのテキストをインラインで名前変更または編集できるようにする
- ドラッグ&ドロップ:階層内のノードを並べ替えられるようにする
- フィルターと検索:ノードを検索する機能を実装する
- リモートデータソース:Web API、OData サービス、またはカスタムエンドポイントにバインドする
- イベントの処理:展開、折りたたみ、選択、編集、ドラッグ&ドロップ操作に応答する
- 仮想化:大規模なデータセット(1000 以上のノード)をスムーズなスクロールで表示する
- カスタムスタイル:ノードにアイコン、色、テンプレートを適用する
インストールとセットアップ
Syncfusion NuGet パッケージをインストールし、Blazor プロジェクトを構成します。
// 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" />
クイックスタート
@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() }
};
}
主なプロパティ
| プロパティ | 型 | 既定値 | 目的 |
|---|---|---|---|
AllowDragAndDrop | bool | false | ドラッグ&ドロップによる階層の並べ替えを有効または無効にします |
AllowEditing | bool | false | ダブルクリックによるノード名の変更を許可します |
AllowMultiSelection | bool | false | Ctrl+クリックによる複数選択を有効にします |
ShowCheckBox | bool | false | 各ノードにチェックボックスを表示します |
AutoCheck | bool | true | 親をチェックしたときに、子ノードを自動的にチェックまたはチェック解除します |
EnablePersistence | bool | false | 展開、選択、チェックの状態を localStorage に保持します |
EnableVirtualization | bool | false | 1000 以上のノードに対する仮想スクロールを有効にします(Height が必要です) |
ExpandedNodes | string[] | Empty | 初期状態で展開するノード ID(双方向バインド可能) |
SelectedNodes | string[] | Empty | 選択されたノード ID(双方向バインド可能) |
CheckedNodes | string[] | Empty | チェックされたノード ID(双方向バインド可能) |
LoadOnDemand | bool | true | ノードの展開時にのみ子ノードを読み込みます |
ExpandOn | ExpandAction | Click | Click/DoubleClick/None による展開を指定します |
Height | string | "auto" | 固定の高さ(仮想化に必要です) |
主なメソッド
| メソッド | 目的 |
|---|---|
ExpandAllAsync() | すべてのノードを展開します |
ExpandAllAsync(string[] nodeIds) | ID を指定してノードを展開します |
CollapseAllAsync() | すべてのノードを折りたたみます |
CollapseAllAsync(string[] nodeIds) | 指定したノードを折りたたみます |
BeginEditAsync(string nodeId) | ノードを編集モードにします |
GetTreeData() | ツリーのすべてのデータを取得します |
GetTreeData(string nodeId) | ID を指定してノードデータを取得します |
EnsureVisibleAsync(string nodeId) | ノードが表示されるようにスクロールします |
CheckAllAsync() | すべてのチェックボックスをチェックします |
UncheckAllAsync() | すべてのチェックボックスのチェックを解除します |
ClearStateAsync() | すべての状態(選択、展開、チェック)をクリアします |
主要なイベント
| イベント | 発生するタイミング | 主な用途 |
|---|---|---|
Created | TreeView の初期化時 | 初期化後のセットアップ、環境設定の読み込み |
DataBound | データバインディングの完了時 | 既定のノードを自動展開、データの検証 |
NodeSelected | ノードを左クリックしたとき | ノードの詳細を読み込み、アクションを有効化 |
NodeClicked | ノードをクリックしたとき | シングルクリックとダブルクリックを区別 |
NodeExpanded | ノードを展開したとき | 子ノードを読み込み(オンデマンド読み込み) |
NodeCollapsed | ノードを折りたたんだとき | 任意:子ノードをメモリから解放 |
NodeEditing | 編集モードに入る前 | 権限を検証し、編集を防止 |
NodeEdited | 編集を確定したとき | 新しいテキストを検証し、サーバーに保存 |
OnNodeDragStart | ドラッグを開始したとき | 制限対象のノードのドラッグを防止 |
NodeDropped | ドロップが完了したとき | サーバー上の階層を更新 |
NodeChecking | チェックボックスを変更する前 | 制限対象のノードへのチェックを防止 |
NodeChecked | チェックボックスを変更したとき | 関連データを更新し、アクションを実行 |
DataSourceChanged | データソースが更新されたとき | フィルターを再適用し、計算を更新 |
OnActionFailure | アクションが失敗したとき(API エラー) | エラーから復旧し、通知を表示 |
OnKeyPress | キーを押したとき | キーボードショートカットを実装(Delete、F2 など) |
よく使われるパターン
パターン 1:基本的な選択
<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);
}
パターン 2:複数選択
<SfTreeView TValue="Item" AllowMultiSelection="true" @bind-SelectedNodes="@SelectedIds">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView>
パターン 3:オンデマンド読み込み
void OnNodeExpanded(NodeExpandEventArgs args)
{
if (args.NodeData.HasChild && args.NodeData.Child == null)
{
// Load children from API
args.NodeData.Child = await FetchChildren(args.NodeData.Id);
}
}
パターン 4:ドラッグ&ドロップ
<SfTreeView TValue="Item" AllowDragAndDrop="true">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
<TreeViewEvents TValue="Item" NodeDropped="OnDropped"></TreeViewEvents>
</SfTreeView>
void OnDropped(DragAndDropEventArgs args) => UpdateHierarchy(args);
パターン 5:ノードの編集
<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);
パターン 6:チェックボックス
<SfTreeView TValue="Item" AllowCheckBoxes="true" ChildChecking="ChildCheckState.Both">
<TreeViewFieldsSettings TValue="Item" DataSource="@Items" />
</SfTreeView>
var checked = treeRef.GetAllCheckedNodes();
ドキュメントとナビゲーションガイド
はじめに
📄 参照: references/getting-started.md
- インストールと NuGet パッケージのセットアップ
- 種類別のプロジェクト構成(WebAssembly、Server、Web App、MAUI)
- CSS テーマの構成
- サービスの登録と最初の TreeView コンポーネント
データバインディングとデータソース
📄 参照: references/data-binding.md
- ローカルデータバインディング(階層構造と自己参照構造)
- OData、OData V4、Web API アダプターを使用したリモートデータ
- 大規模なデータセット向けのオンデマンド読み込み
- TreeViewFieldsSettings のプロパティマッピング
- バインディング後の処理に使用する DataBound イベント
ノードの選択
📄 参照: references/node-selection.md
- 単一ノードの選択(既定の動作)
- AllowMultiSelection プロパティを使用した複数選択
- NodeSelected イベントによる選択ノードのデータへのアクセス
- SelectedNodes バインディングを使用したプログラムによる選択
- 選択の検証と条件付き選択
展開と折りたたみのアクション
📄 参照: references/expand-collapse-actions.md
- 展開/折りたたみメソッド(ExpandAllAsync、CollapseAllAsync)
- プログラムで制御するための ExpandedNodes の双方向バインディング
- データソースによる初期展開状態の設定
- TreeViewNodeAnimationSettings を使用した展開/折りたたみアニメーション
- NodeExpanded イベントによる子ノードのオンデマンド読み込み
ノードの編集
📄 参照: references/node-editing.md
- AllowEditing プロパティで編集を有効化
- ダブルクリックで編集モードに入る
- BeginEditAsync メソッドによるプログラムでの編集開始
- 検証に使用する NodeEditing および NodeEdited イベント
- 競合検出を伴う名前変更操作
チェックボックス機能
📄 参照: references/checkbox-features.md
- 複数項目の選択に使用する ShowCheckBox プロパティ
- 親子間の自動同期を行う AutoCheck
- プログラムで制御するための CheckedNodes の双方向バインディング
- フィルタリングと反復処理によるチェック済みノードの取得
- 権限およびロールベースのチェックボックスパターン
イベントとコールバック
📄 参照: references/events-handling.md
- ライフサイクルイベント(Created、DataBound)
- 選択イベント(NodeSelected、SelectedNodesChanged)
- 展開/折りたたみイベント(NodeExpanded、NodeCollapsed)
- 編集イベント(NodeEditing、NodeEdited)
- チェックボックスイベント(NodeChecking、NodeChecked)
- ドラッグ&ドロップイベント(OnNodeDragStart、NodeDropped)
- キーボードショートカット(Enter、Delete、F2、矢印キー)
高度な機能
📄 参照: references/advanced-features.md
- 階層の並べ替えに対応したドラッグ&ドロップ
- 1000 個以上のノードに対応する UI 仮想化
- 検索とフィルタリング機能
- 並べ替え(昇順、降順、なし)
- パフォーマンス最適化の手法
カスタマイズとスタイル設定
📄 参照: references/customization-styling.md
- アイコンのカスタマイズ(展開/折りたたみ、ノードアイコン)
- データに応じた動的なアイコン
- テキストの折り返しと表示形式
- e-icons クラスを使った CSS スタイル設定
- テーマのサポートとレスポンシブデザイン
認可とセキュリティ
📄 参照: references/authorization-authentication.md
- AuthorizeView を使った認証の設定
- ロールベースの認可と権限
- ノードレベルのアクセス制御
- クレームベースの認可パターン
- 編集操作とドラッグ&ドロップの保護
ナビゲーションパターン
📄 参照: references/navigation-patterns.md
- ノードの走査メソッド(親、子、兄弟)
- パンくずナビゲーションの実装
- ノードリンク用の NavigateUrl プロパティ
- 親子間のナビゲーション関係
- 特定のノードへのディープリンク
クイックリンクと実際の使用例
お困りですか? まずはこちらをご覧ください。
- クイックスタート - 5 分で実行を開始
- 一般的なパターン - 用途に合わせてコピーして使えるパターン
- 主要なプロパティ - プロパティの詳細を確認
- data-binding.md - データバインディングの方法を学ぶ
- events-handling.md - すべてのイベントを確認
実際の使用例:
- ファイルブラウザー:階層データ+展開/折りたたみ+アイコン+ドラッグ&ドロップを使用
- 組織図:データバインディング+テンプレート+複数レベルのナビゲーションを使用
- ナビゲーションメニュー:階層データ+キーボード操作+オンデマンド読み込みを使用
- カテゴリーフィルター:自己参照型データ+チェックボックス+フィルタリングを使用
- 権限 UI:チェックボックス+AutoCheck+ロールベースの認可を使用
まとめ
このスキルでは、Syncfusion Blazor TreeView コンポーネントの実装に関する包括的なガイダンスを提供します。用途に応じて必要なリファレンスファイルを見つけるには、上記の ドキュメントとナビゲーションガイド セクションをご利用ください。