mcpField
S
syncfusion-winui-treeview

syncfusion-winui-treeview

github.com/syncfusion開発151 回インストール1 週間前に更新
リポジトリ

syncfusion-winui-treeview について

Windows App SDK アプリで Syncfusion の SfTreeView を実装するためのガイドです。階層データ、操作、編集、外観のカスタマイズを扱い、ツリー型 UI の開発に役立ちます。

主な機能

  1. 01バインド/非バインドデータモード
  2. 02ノード選択とインライン編集
  3. 03ドラッグ&ドロップ操作
  4. 04子ノードの遅延読み込み
  5. 05テンプレートと MVVM のガイド

活用シーン

  1. 01ファイルやフォルダーのブラウザー作成
  2. 02組織階層の表示
  3. 03展開可能なカテゴリーナビゲーションの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/syncfusion/winui-ui-components-skills --skill syncfusion-winui-treeview

インストール後、Claude Code で/syncfusion-winui-treeviewを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
appearance-customization.md
data-binding.md
drag-drop-crud.md
editing.md
expand-collapse.md
getting-started.md
interactivity.md
mvvm-patterns.md
selection.md

詳細

WinUI TreeView の実装

Windows App SDK アプリケーションで階層データを表示する Syncfusion® WinUI TreeView(SfTreeView)コントロールの包括的なガイドです。

このスキルを使用する場面

次のような場合に、このスキルを使用してください。

  • 階層データを表示する場合(ファイル、フォルダー、カテゴリなど)
  • WinUI アプリケーションでファイルエクスプローラーやフォルダーブラウザーを実装する場合
  • 組織図や報告体制を作成する場合
  • 展開/折りたたみ可能なノードを使ったカテゴリナビゲーションを構築する場合
  • 単一または複数の選択モードでノード選択を有効にする場合
  • ツリーノードのインライン編集をサポートする場合
  • ノードの並べ替えや移動にドラッグ&ドロップを実装する場合
  • 大規模な階層データをオンデマンドで読み込む場合
  • テンプレートやスタイルでツリーの外観をカスタマイズする場合
  • 階層データに対するCRUD 操作を処理する場合

TreeView コントロールは、親子関係やネストされたデータ構造の視覚化に優れています。

コンポーネントの概要

SfTreeView は、ノードを展開または折りたたむことで、階層構造のデータを表示するデータ指向のコントロールです。フォルダー構造、組織階層、またはネストされた関係の表示によく使われます。

主な機能
  • 2 つのデータモード: バインドモード(データバインディング)と非バインドモード(手動でノードを作成)
  • 柔軟な選択: キーボード修飾キーを使った拡張選択など、複数の選択モード
  • インライン編集: カスタムテンプレートを使ってノードのコンテンツを編集
  • ドラッグ&ドロップ: ツリー内でノードを並べ替えたり移動したりできます
  • オンデマンド読み込み: 親ノードの展開時に子ノードを遅延読み込み
  • チェックボックス: 複数選択に対応した組み込みのチェックボックス
  • コンテキストメニュー: ノード操作用のフライアウトメニューを追加
  • アニメーション: スムーズな展開/折りたたみアニメーション
  • MVVM サポート: コマンドとデータバインディングを全面的にサポート
  • カスタマイズ: テンプレートを使って外観を完全に制御
TreeView を選ぶ場面

次のような場合は TreeView を選んでください。

  • 親子データを階層的に視覚化する
  • 省スペースな表示のためにセクションを展開/折りたたみする
  • 複数階層のネスト(2 階層以上)がある
  • ユーザーに馴染みのあるツリーナビゲーションパターンを使う

次の場合は、別のコントロールを検討してください。

  • フラットなリスト → ListView または DataGrid を使用
  • 単純なグループ化データ → グループ化機能付きの ListView を使用
  • ネットワーク/グラフの関係 → カスタムの視覚化を使用

ドキュメントとナビゲーションガイド

はじめに

📄 参照: references/getting-started.md

初期設定と最初の TreeView の作成は、ここから始めてください。

  • NuGet パッケージ(Syncfusion.TreeView.WinUI)のインストール
  • XAML ページへの TreeView の追加
  • 非バインドノードを使った基本的な TreeView の実装
  • 階層データを使った簡単なバインドモードの例
  • 名前空間のインポートとコントロールの初期化
  • プロジェクトの構成
データ管理

📄 参照: references/data-binding.md

TreeView をデータモデルにバインドする方法を説明します。

  • バインドモードと非バインドモードの比較
  • ItemsSource を使った階層データソースのバインド
  • 自己関連バインディング用の ChildPropertyName
  • 複雑な階層構造用の HierarchyPropertyDescriptors
  • ItemTemplate と ExpanderTemplate の構成
  • ObservableCollection と INotifyPropertyChanged
  • NodePopulationMode(OnDemand と Instant)
  • 変更追跡用の NotificationSubscriptionMode

📄 参照: references/drag-drop-crud.md

ノードの操作と CRUD 操作について説明します。

  • ドラッグ&ドロップの有効化(AllowDragging、AllowDrop)
  • ドラッグ&ドロップのイベントとカスタマイズ
  • プログラムによるノードの追加
  • 階層からのノードの削除
  • ノードのコンテンツの更新
  • オンデマンド読み込みの実装
  • コンテキストメニューの操作
ユーザー操作機能

📄 読む: references/selection.md

ノード選択機能を実装します:

  • SelectionMode のオプション(None、Single、SingleDeselect、Multiple、Extended)
  • マウスとタッチによる UI 選択
  • プログラムによる選択(SelectedItem、SelectedItems)
  • 選択イベント(SelectionChanging、SelectionChanged)
  • 選択時のキーボードナビゲーション
  • Ctrl/Shift キーを使った複数選択
  • 選択のカスタマイズとスタイル設定

📄 読む: references/expand-collapse.md

ノードの展開と折りたたみを制御します:

  • AutoExpandMode のオプション
  • プログラムによる展開と折りたたみ
  • ExpandAction の設定(シングルタップ/ダブルタップ)
  • IsExpanded プロパティの使用
  • 展開/折りたたみイベント
  • すべて展開/すべて折りたたむシナリオ
  • 展開状態の維持

📄 読む: references/editing.md

ツリーノードのインライン編集を有効にします:

  • AllowEditing による編集の有効化
  • EditTemplate と EditTemplateSelector
  • 編集モードの開始(F2 キー)
  • 編集の確定とキャンセル
  • 編集イベント(ItemBeginEdit、ItemEndEdit)
  • 編集中の検証
  • バインドモードと非バインドモードにおける編集の違い

📄 読む: references/interactivity.md

TreeView にインタラクティブな機能を追加します:

  • チェックボックスのサポートと設定
  • コンテキストフライアウトメニュー
  • インタラクションイベント(ItemTapped、ItemDoubleTapped、ItemHolding)
  • キーボードショートカットとナビゲーション
  • タッチジェスチャ
  • スクロール動作
  • アニメーション設定(IsAnimationEnabled)
高度な機能

📄 読む: references/mvvm-patterns.md

TreeView で MVVM アーキテクチャを実装します:

  • 階層データに対する MVVM パターン
  • TreeView のコマンド
  • データバインディングのベストプラクティス
  • ツリー構造向けの ViewModel 設計
  • ObservableCollections の処理
  • イベントからコマンドへの変換
  • TreeView の ViewModel の単体テスト
カスタマイズ

📄 読む: references/appearance-customization.md

視覚的な外観をカスタマイズします:

  • ノードのコンテンツ用 ItemTemplate
  • 展開/折りたたみアイコン用 ExpanderTemplate
  • 項目の高さのカスタマイズ(ItemHeight、QueryNodeSize)
  • TreeLines の設定
  • インデントと間隔
  • アイコンと画像の追加
  • 選択時/ホバー時の状態のスタイル設定
  • テーマとの統合

クイックスタートの例

ファイル構造を表示する、最小限の TreeView の例です:

XAML:

<Page xmlns:treeView="using:Syncfusion.UI.Xaml.TreeView">
    
    <Page.DataContext>
        <local:FileViewModel />
    </Page.DataContext>
    
    <treeView:SfTreeView x:Name="treeView"
                          Width="400"
                          Height="500"
                          ChildPropertyName="SubFiles"
                          ItemsSource="{Binding Files}">
        <treeView:SfTreeView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="📁" Margin="0,0,5,0" />
                    <TextBlock Text="{Binding FileName}" 
                               VerticalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </treeView:SfTreeView.ItemTemplate>
    </treeView:SfTreeView>
    
</Page>

ViewModel(C#):

public class FileViewModel : INotifyPropertyChanged
{
    public ObservableCollection<FileNode> Files { get; set; }
    
    public FileViewModel()
    {
        Files = new ObservableCollection<FileNode>
        {
            new FileNode 
            { 
                FileName = "Documents",
                SubFiles = new ObservableCollection<FileNode>
                {
                    new FileNode { FileName = "Resume.docx" },
                    new FileNode { FileName = "CoverLetter.pdf" }
                }
            },
            new FileNode 
            { 
                FileName = "Downloads",
                SubFiles = new ObservableCollection<FileNode>()
            }
        };
    }
    
    public event PropertyChangedEventHandler PropertyChanged;
}

public class FileNode : INotifyPropertyChanged
{
    private string _fileName;
    private ObservableCollection<FileNode> _subFiles;
    
    public string FileName
    {
        get => _fileName;
        set { _fileName = value; OnPropertyChanged(); }
    }
    
    public ObservableCollection<FileNode> SubFiles
    {
        get => _subFiles;
        set { _subFiles = value; OnPropertyChanged(); }
    }
    
    public event PropertyChangedEventHandler PropertyChanged;
    
    protected void OnPropertyChanged([CallerMemberName] string name = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}

よく使われるパターン

パターン 1:アイコン付きファイルエクスプローラー
<treeView:SfTreeView ItemsSource="{Binding Items}"
                      ChildPropertyName="Children">
    <treeView:SfTreeView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <FontIcon Glyph="{Binding Icon}" 
                          FontSize="16" 
                          Margin="0,0,8,0" />
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
    </treeView:SfTreeView.ItemTemplate>
</treeView:SfTreeView>
パターン 2:チェックボックスを使った複数選択
<treeView:SfTreeView SelectionMode="Multiple"
                      CheckBoxMode="Recursive">
    
</treeView:SfTreeView>
パターン 3:オンデマンド読み込み
<treeView:SfTreeView LoadOnDemandCommand="{Binding LoadChildrenCommand}">
    
</treeView:SfTreeView>
パターン 4:プログラムによる選択
// Single selection
treeView.SelectedItem = viewModel.RootNode.Children[0];

// Multiple selection
treeView.SelectedItems.Add(node1);
treeView.SelectedItems.Add(node2);

// Select all nodes
treeView.SelectAll();
パターン 5:コンテキストメニューの操作
<treeView:SfTreeView ItemHolding="OnItemHolding">
    
</treeView:SfTreeView>
private void OnItemHolding(object sender, ItemHoldingEventArgs e)
{
    var flyout = new MenuFlyout();
    flyout.Items.Add(new MenuFlyoutItem { Text = "Rename" });
    flyout.Items.Add(new MenuFlyoutItem { Text = "Delete" });
    flyout.ShowAt(e.Element);
}

主なプロパティとメソッド

基本プロパティ
プロパティ型説明
ItemsSourceobjectバインドする階層データコレクション
ChildPropertyNamestring子項目を含むプロパティ名
SelectionModeSelectionMode選択動作(None、Single、Multiple、Extended)
SelectedItemobject現在選択されている項目
SelectedItemsObservableCollection選択された項目のコレクション
AllowEditingboolインライン編集を有効にする
AllowDraggingboolドラッグ&ドロップを有効にする
AutoExpandModeAutoExpandMode自動展開の動作(None、AllNodes、RootNodes)
IsAnimationEnabledbool展開/折りたたみのアニメーションを有効にする
CheckBoxModeCheckBoxModeチェックボックスの動作(None、Recursive)
LoadOnDemandbool子ノードの遅延読み込みを有効にする
主要なメソッド
メソッド説明
ExpandAll()ツリー内のすべてのノードを展開します
CollapseAll()すべてのノードを折りたたみます
ExpandNode(TreeViewNode)指定したノードを展開します
CollapseNode(TreeViewNode)指定したノードを折りたたみます
SelectAll()すべてのノードを選択します
ClearSelection()すべての選択を解除します
BringIntoView(TreeViewNode)ノードが表示されるようにスクロールします
重要なイベント
イベント説明
SelectionChanged選択が変更されたときに発生します
ItemTappedノードがタップされたときに発生します
ItemDoubleTappedノードがダブルタップされたときに発生します
NodeExpandingノードが展開される前に発生します
NodeExpandedノードが展開された後に発生します
NodeCollapsingノードが折りたたまれる前に発生します
NodeCollapsedノードが折りたたまれた後に発生します
ItemBeginEdit編集が開始されたときに発生します
ItemEndEdit編集が終了したときに発生します

一般的な使用例

使用例 1:ファイルシステムブラウザー

コンピューターのフォルダーやファイルを、展開/折りたたみ、ファイルアイコン、コンテキストメニュー操作(名前の変更、削除、コピー)とともに表示します。

使用する場面: ドキュメント管理、ファイルピッカー、アセットブラウザー

必要な主な機能:

  • 階層データを使用するバインドモード
  • アイコンを含むカスタム ItemTemplate
  • コンテキストフライアウトメニュー
  • ファイル移動用のドラッグ&ドロップ
使用例 2:組織図

部署、チーム、従業員を含む会社の階層構造を表示し、選択して詳細を確認できるようにします。

使用する場面: 人事アプリケーション、組織の可視化、報告系統

必要な主な機能:

  • 従業員データを使用するバインドモード
  • 初期表示用の AutoExpandMode
  • 単一選択モード
  • 従業員カード用のカスタムテンプレート
使用例 3:製品カテゴリーブラウザー

展開可能なカテゴリーとサブカテゴリーを使った、Eコマースのカテゴリー ナビゲーションです。

使用する場面: Eコマース、コンテンツ管理、製品カタログ

必要な主な機能:

  • 大規模なカタログ向けのオンデマンド読み込み
  • 単一選択
  • カテゴリー用のカスタムスタイル
  • ナビゲーション用のクリックイベント
使用例 4:設定パネル

グループ化されたオプションと展開可能なセクションを備えた、階層型の設定インターフェイスです。

使用する場面: アプリケーション設定、環境設定 UI、構成パネル

必要な主な機能:

  • 手動でノードを設定する非バインドモード
  • 利便性を高める AutoExpandMode
  • 設定コントロール用のカスタム ItemTemplate
  • 展開状態の維持
使用例 5:プロジェクトエクスプローラー(IDE風)

Visual Studio のように、プロジェクト、フォルダー、ファイルを含むソリューション構造を表示します。

使用する場面: 開発者向けツール、IDE、コードエディター

必要な主な機能:

  • ソリューションモデルを使用するバインドモード
  • 名前変更用のインライン編集
  • 再編成用のドラッグ&ドロップ
  • ファイル操作用のコンテキストメニュー
  • 一括操作用の複数選択

パフォーマンスに関するヒント

  • 大規模な階層(ノード数 1000 以上)では、NodePopulationMode に OnDemand を使用します
  • 必要な場合に限り、NotificationSubscriptionMode を CollectionChanged に設定します
  • パフォーマンスを向上させるため、Binding の代わりに x:Bind を使用します
  • ItemTemplate の複雑さを抑えます
  • 子要素が多い深い階層では、LoadOnDemand を使用します
  • 非常に大規模でフラットなセクションでは、仮想化を検討します

トラブルシューティング早見表

問題解決策
ノードが展開されないChildPropertyName がプロパティ名と正確に一致しているか確認します
選択が機能しないSelectionMode を Single または Multiple に設定します
データが更新されないデータモデルに INotifyPropertyChanged を実装します
子要素が読み込まれないNotificationSubscriptionMode を CollectionChanged に設定します
パフォーマンスが低いOnDemand モードと LoadOnDemand を有効にします
編集が有効にならないAllowEditing="True" を設定し、EditTemplate を定義します
ドラッグ&ドロップが機能しないAllowDragging と AllowDrop の両方を true に設定します

関連コンポーネント

  • ListView - 階層構造のないフラットなリスト向け
  • DataGrid - 階層構造をサポートする表形式のデータ向け(TreeGrid)
  • Expander - シンプルな展開/折りたたみセクション向け

次のステップ: 必要に応じて、上記リンク先のリファレンスドキュメントをお読みください。TreeView を初めて使用する場合は、getting-started.md から始めてください。

コメント