mcpField
S
syncfusion-wpf-treegrid

syncfusion-wpf-treegrid

github.com/syncfusionデザイン・UI5158 回インストール1 週間前に更新
リポジトリ

syncfusion-wpf-treegrid について

WPF で自己参照または入れ子のデータを展開可能なグリッドに表示する、Syncfusion SfTreeGrid の実装ガイドです。データ操作、編集、カスタマイズ、出力、大規模階層のオンデマンド読み込みを扱います。

主な機能

  1. 01自己参照および入れ子データのバインド
  2. 02子ノードのオンデマンド読み込み
  3. 03列設定と編集
  4. 04ソート、フィルタリング、選択
  5. 05条件付きスタイルとセル結合
  6. 06Excel および PDF への出力

活用シーン

  1. 01従業員や勘定の階層表示
  2. 02大規模なフォルダーツリーの遅延読み込み
  3. 03入れ子のプロジェクトタスク管理
  4. 04製品構成やカテゴリカタログの表示

インストール

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

$npx skills add https://github.com/syncfusion/wpf-ui-components-skills --skill syncfusion-wpf-treegrid

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

同梱ファイル

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

references/
advanced-features.md
column-sizing.md
column-types.md
columns.md
conditional-styling.md
data-binding.md
data-validation.md
editing.md
export-and-printing.md
filtering.md
getting-started.md
load-on-demand.md
merge-cells.md
selection.md
sorting.md
styles-and-templates.md

詳細

WPF TreeGrid(SfTreeGrid)の実装

Syncfusion® WPF TreeGrid コントロールの実装に関する包括的なガイドです。TreeGrid は、自己関連データや階層データを列付きのツリー構造で表示する、データ指向のコントロールです。このスキルでは、セットアップ、データバインディング、列の構成、インタラクティブ機能、データ操作、スタイル設定、高度な機能について詳しく説明します。

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

次のような場合にこのスキルを使用します。

  • グリッド内に、展開・折りたたみ可能なツリー構造で階層データを表示する
  • 自己関連データをバインドする(単一のコレクション内の親子関係)
  • ネストされたコレクションをバインドする(親子のオブジェクト階層)
  • 大規模な階層データセットに対してオンデマンド読み込みを実装する
  • さまざまな種類(テキスト、数値、日時、チェックボックス、コンボボックス)の列を構成する
  • TreeGrid で検証機能付きの編集を有効にする
  • 階層データの並べ替えとフィルタリングを実装する
  • 選択動作をカスタマイズする(単一選択、複数選択、行、セル)
  • データやノードレベルに基づいて条件付きスタイルを適用する
  • TreeGrid の行で列をまたいでセルを結合する
  • TreeGrid を Excel または PDF 形式にエクスポートする
  • TreeGrid コントロールでMVVM パターンを実装する
  • テーマ、スタイル、テンプレートを使って外観をカスタマイズする

このスキルは、階層データや親子データを、インタラクティブで多機能なグリッドインターフェイスで表示する必要がある WPF アプリケーションに不可欠です。

コンポーネントの概要

SfTreeGrid コントロールは、次の機能を提供します。

  • 階層データの表示: 自己関連データとネストされたコレクションのバインディング
  • 複数の列タイプ: テキスト、数値、DateTime、CheckBox、ComboBox、Hyperlink、テンプレート列
  • インタラクティブ機能: 編集、選択、並べ替え、フィルタリング、ドラッグ&ドロップ
  • データ操作: 複数のフィルターレベル(Root、All、Extended)を使用した並べ替えとフィルタリング
  • オンデマンド読み込み: ノードの展開時に子ノードを効率的に読み込み
  • セルの結合: 列をまたいで隣接するセルを結合
  • エクスポート機能: カスタマイズして Excel や PDF にエクスポート
  • スタイル設定: 条件付きスタイル、テーマ、テンプレート、外観のカスタマイズ
  • MVVM のサポート: コマンドバインディングに対応した完全な MVVM パターン
  • パフォーマンス: 大規模なデータセット向けの仮想化と最適化された描画

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

はじめに

📄 参照: references/getting-started.md

初期セットアップと基本的な実装は、こちらから始めてください。

  • アセンブリの配置(Syncfusion.SfGrid.WPF、Syncfusion.Data.WPF、Syncfusion.Shared.WPF)
  • TreeGrid を使用した WPF プロジェクトの作成
  • デザイナー、XAML、またはコードビハインドを使用したコントロールの追加
  • TreeGrid の基本的なセットアップ例
  • 自己関連データとネストされたコレクションの簡単なバインディング
データバインディングと操作

データバインディングの方法
📄 参照: references/data-binding.md

  • 自己関連データのバインディング(ParentPropertyName、ChildPropertyName)
  • ネストされたコレクションのバインディング(ChildPropertyName)
  • IEnumerable コレクションのサポート
  • 動的データオブジェクトのバインディング
  • INotifyCollectionChanged と ObservableCollection
  • データの更新とリフレッシュ

オンデマンド読み込み
📄 参照: references/load-on-demand.md

  • オンデマンド読み込みに使用する RequestTreeItems イベント
  • MVVM シナリオ向けの LoadOnDemandCommand
  • ノードの展開時に子ノードを遅延読み込み
  • 大規模なデータセットのパフォーマンス最適化
  • ノード読み込み中のインジケーター表示
列の設定

列の基本
📄 参照: references/columns.md

  • 列の追加と削除
  • AutoGenerateColumns と手動設定の違い
  • 列のプロパティ(HeaderText、MappingName、Width、Alignment)
  • 列の表示設定と固定列
  • 列の並べ替えとサイズ変更
  • テキストの折り返しと省略表示

列の種類
📄 参照: references/column-types.md

  • 文字列データ用の TreeGridTextColumn
  • 数値形式を指定できる TreeGridNumericColumn
  • 日付パターンを指定できる TreeGridDateTimeColumn
  • ブール値用の TreeGridCheckBoxColumn
  • ドロップダウン選択用の TreeGridComboBoxColumn
  • クリック可能なリンク用の TreeGridHyperlinkColumn
  • カスタムコンテンツ用の TreeGridTemplateColumn
  • カスタム列の種類の作成

列のサイズ設定
📄 参照: references/column-sizing.md

  • ColumnSizer プロパティ(Auto、Star、SizeToCells、SizeToHeader)
  • コンテンツに合わせた列幅の自動調整
  • 列幅の手動指定
  • ユーザーによるサイズ変更の動作
  • 最小幅と最大幅の制約
  • 残りのスペースを埋める方法
インタラクティブ機能

編集
📄 参照: references/editing.md

  • グリッドおよび列単位の AllowEditing プロパティ
  • 編集モード(OnTap、OnDoubleTap)
  • 編集のトリガーと編集テンプレートのカスタマイズ
  • BeginEdit イベントと EndEdit イベント
  • プログラムによる編集(BeginEdit、EndEdit、CurrentCell)
  • 編集中の検証

データ検証
📄 参照: references/data-validation.md

  • IDataErrorInfo 検証インターフェイス
  • INotifyDataErrorInfo のサポート
  • セル単位および行単位の検証
  • カスタム検証ルール
  • 検証エラー表示のカスタマイズ
  • 検証エラーの処理

選択
📄 参照: references/selection.md

  • SelectionMode(Single、Multiple、Extended、None)
  • SelectionUnit(Row、Cell、Any)
  • SelectedItem と SelectedItems のバインディング
  • CurrentCell と CurrentItem のプロパティ
  • プログラムによる選択
  • SelectionChanged イベントと CurrentCellActivated イベント

セルの結合
📄 参照: references/merge-cells.md

  • セルを結合する QueryCoveredRange イベント
  • 固定範囲による列単位の結合
  • セルの内容に基づく結合
  • 結合セルでのナビゲーションと選択
  • セル結合に関するパフォーマンス上の考慮事項
データ操作

並べ替え
📄 参照: references/sorting.md

  • AllowSorting プロパティ(グリッド単位および列単位)
  • 単一列および複数列での並べ替え
  • 3 状態の並べ替え(昇順、降順、並べ替えなし)
  • グリッド単位および列単位での初期並べ替え方向(InitialSortDirection)
  • SortColumnDescriptions によるプログラムでの並べ替え
  • IComparer によるカスタム並べ替えロジック
  • SortColumnsChanging イベントと SortColumnsChanged イベント

フィルタリング
📄 参照: references/filtering.md

  • 階層フィルタリング用の FilterLevel(Root、All、Extended)
  • フィルター行を使った高度なフィルター UI
  • FilterPredicates によるプログラムでのフィルタリング
  • カスタムフィルターロジック
  • FilterChanging イベントと FilterChanged イベント
  • フィルターのクリアと保持
スタイルとカスタマイズ

条件付きスタイル設定
📄 参照: references/conditional-styling.md

  • 行とセルのスタイル設定用の StyleSelector
  • 行ベースの書式設定用の RowStyleSelector
  • セルベースの書式設定用の CellStyleSelector
  • データ値に基づく条件付き書式設定
  • ノード階層に基づくスタイル設定(親と子)
  • 行の交互スタイル

スタイルとテンプレート
📄 参照: references/styles-and-templates.md

  • CellTemplate と EditTemplate のカスタマイズ
  • 列ヘッダー用の HeaderTemplate
  • 展開/折りたたみボタン用の ExpanderTemplate
  • RowHeaderTemplate のカスタマイズ
  • セルと行のスタイル設定
  • ビジュアル状態とトリガー
  • テーマとの統合
高度な機能

エクスポートと印刷
📄 参照: references/export-and-printing.md

  • Excel へのエクスポート(ExportToExcel メソッド)
  • PDF へのエクスポート(ExportToPdf メソッド)
  • TreeGridExcelExportingOptions のカスタマイズ
  • TreeGridPdfExportingOptions のカスタマイズ
  • 印刷機能(PrintSettings)
  • 特定のノードと列のエクスポート

高度な設定
📄 参照: references/advanced-features.md

  • ICommand を使用した MVVM パターンの実装
  • GridLinesVisibility のカスタマイズ(Both、Horizontal、Vertical、None)
  • シリアル化と逆シリアル化(Save/LoadSettings)
  • ローカライズ(ResourceManager)
  • アクセシビリティ向け UI オートメーションのサポート
  • テーマ設定(MaterialLight、MaterialDark、Office2019 など)
  • ヘルパーメソッドとユーティリティ
  • ノード選択用の NodeCheckBox
  • ツールチップのカスタマイズ

クイックスタートの例

基本的な自己リレーショナル TreeGrid
<Window x:Class="TreeGridSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:syncfusion="http://schemas.syncfusion.com/wpf">
    
    <syncfusion:SfTreeGrid Name="treeGrid"
                           AutoGenerateColumns="True"
                           ChildPropertyName="Children"
                           ItemsSource="{Binding Employees}"
                           AllowSorting="True"
                           AllowFiltering="True"
                           AllowEditing="True">
    </syncfusion:SfTreeGrid>
</Window>
using Syncfusion.UI.Xaml.TreeGrid;
using System.Collections.ObjectModel;

namespace TreeGridSample
{
    public class Employee
    {
        public int EmployeeID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Title { get; set; }
        public int ReportsTo { get; set; }
        public ObservableCollection<Employee> Children { get; set; }
        
        public Employee()
        {
            Children = new ObservableCollection<Employee>();
        }
    }

    public class EmployeeViewModel
    {
        public ObservableCollection<Employee> Employees { get; set; }
        
        public EmployeeViewModel()
        {
            Employees = new ObservableCollection<Employee>();
            PopulateData();
        }
        
        private void PopulateData()
        {
            var ceo = new Employee
            {
                EmployeeID = 1,
                FirstName = "Robert",
                LastName = "King",
                Title = "CEO"
            };
            
            ceo.Children.Add(new Employee
            {
                EmployeeID = 2,
                FirstName = "David",
                LastName = "Smith",
                Title = "VP of Sales",
                ReportsTo = 1
            });
            
            ceo.Children.Add(new Employee
            {
                EmployeeID = 3,
                FirstName = "Nancy",
                LastName = "Davolio",
                Title = "VP of Marketing",
                ReportsTo = 1
            });
            
            Employees.Add(ceo);
        }
    }
}

よく使われるパターン

パターン 1:自己リレーショナルデータのバインド

同じコレクション内に親子関係があるデータの場合:

public class Task
{
    public int TaskID { get; set; }
    public string TaskName { get; set; }
    public int? ParentID { get; set; }  // Nullable for root items
}

// ViewModel
public ObservableCollection<Task> Tasks { get; set; }
<syncfusion:SfTreeGrid Name="treeGrid"
                       ItemsSource="{Binding Tasks}"
                       ParentPropertyName="ParentID"
                       SelfRelationRootValue="-1"
                       ChildPropertyName="TaskID">
</syncfusion:SfTreeGrid>
パターン 2:入れ子になったコレクションのバインド

明示的な子コレクションを持つデータの場合:

public class Folder
{
    public string FolderName { get; set; }
    public ObservableCollection<Folder> SubFolders { get; set; }
}
<syncfusion:SfTreeGrid Name="treeGrid"
                       ItemsSource="{Binding Folders}"
                       ChildPropertyName="SubFolders">
</syncfusion:SfTreeGrid>
パターン 3:RequestTreeItems によるオンデマンド読み込み

親ノードの展開時に子ノードを読み込む大規模データセットの場合:

treeGrid.RequestTreeItems += TreeGrid_RequestTreeItems;

private void TreeGrid_RequestTreeItems(object sender, TreeGridRequestTreeItemsEventArgs e)
{
    if (e.ParentItem == null)
    {
        // Load root nodes
        e.ChildItems = GetRootNodes();
    }
    else
    {
        // Load child nodes for expanded parent
        var parent = e.ParentItem as BusinessObject;
        e.ChildItems = GetChildNodes(parent.ID);
    }
}
パターン 4:カスタム列の定義
<syncfusion:SfTreeGrid ItemsSource="{Binding Employees}"
                       AutoGenerateColumns="False">
    <syncfusion:SfTreeGrid.Columns>
        <syncfusion:TreeGridTextColumn HeaderText="Name" 
                                       MappingName="FirstName"
                                       Width="150"/>
        <syncfusion:TreeGridNumericColumn HeaderText="Age" 
                                          MappingName="Age"
                                          NumberDecimalDigits="0"/>
        <syncfusion:TreeGridDateTimeColumn HeaderText="DOB" 
                                           MappingName="DateOfBirth"
                                           Pattern="ShortDate"/>
        <syncfusion:TreeGridCheckBoxColumn HeaderText="Active" 
                                           MappingName="IsActive"/>
    </syncfusion:SfTreeGrid.Columns>
</syncfusion:SfTreeGrid>
パターン 5:MVVM コマンドのバインド
<syncfusion:SfTreeGrid ItemsSource="{Binding Employees}"
                       ChildPropertyName="Children">
    <syncfusion:SfTreeGrid.RecordContextMenu>
        <ContextMenu>
            <MenuItem Header="Add Child" 
                      Command="{Binding AddChildCommand}"
                      CommandParameter="{Binding}"/>
            <MenuItem Header="Delete" 
                      Command="{Binding DeleteCommand}"
                      CommandParameter="{Binding}"/>
        </ContextMenu>
    </syncfusion:SfTreeGrid.RecordContextMenu>
</syncfusion:SfTreeGrid>
public class EmployeeViewModel : INotifyPropertyChanged
{
    public ICommand AddChildCommand { get; set; }
    public ICommand DeleteCommand { get; set; }
    
    public EmployeeViewModel()
    {
        AddChildCommand = new RelayCommand(AddChild);
        DeleteCommand = new RelayCommand(Delete);
    }
    
    private void AddChild(object parameter)
    {
        var parent = parameter as Employee;
        if (parent != null)
        {
            parent.Children.Add(new Employee { /* ... */ });
        }
    }
}

主なプロパティ

基本プロパティ
プロパティ型説明
ItemsSourceIEnumerableTreeGrid のデータソース
ChildPropertyNamestring子コレクションのプロパティ名
ParentPropertyNamestring親 ID のプロパティ名(自己リレーショナル)
SelfRelationRootValueobjectルートレベルのノードを示す値
AutoGenerateColumnsboolデータソースから列を自動生成するかどうか
ColumnsTreeGridColumns列定義のコレクション
動作プロパティ
プロパティ型説明
AllowEditingboolセル編集の有効/無効
AllowSortingbool並べ替えの有効/無効
AllowFilteringboolフィルタリングの有効/無効
FilterLevelFilterLevelフィルタリング範囲(Root、All、Extended)
SelectionModeGridSelectionMode選択モード(Single、Multiple、Extended)
SelectionUnitGridSelectionUnit選択単位(Row、Cell、Any)
AutoExpandModeAutoExpandMode自動展開の動作(RootNodesExpanded、AllNodesExpanded)
ExpanderPositionExpanderPosition展開/折りたたみアイコンの位置(Start、End)
表示プロパティ
プロパティ型説明
GridLinesVisibilityGridLinesVisibilityグリッド線の表示(Both、Horizontal、Vertical、None)
ColumnSizerGridLengthUnitType列の自動サイズ調整方法
RowHeightdouble各行の高さ
HeaderRowHeightdoubleヘッダー行の高さ
IndentColumnWidthdouble各階層のインデント幅

よくある使用例

1. 従業員階層の管理

展開可能なツリー形式で、従業員、マネージャー、部門を含む組織構造を表示します。

2. ファイルシステムブラウザー

大規模なディレクトリツリーではオンデマンド読み込みを使用し、階層構造でフォルダーとファイルを表示します。

3. プロジェクトタスク管理

プロジェクト、サブプロジェクト、タスク、サブタスクを、ステータスの追跡、編集、条件付きスタイル設定とともに表示します。

4. 部品表(BOM)

製品のアセンブリを、構成部品、サブコンポーネント、数量、コストとともに階層表示します。

5. カテゴリ別商品カタログ

商品カテゴリ、サブカテゴリ、商品を、フィルタリング、並べ替え、エクスポート機能とともに表示します。

6. 勘定科目階層

親子関係、残高計算、詳細へのドリルダウン機能を備えた財務勘定科目ツリーです。

7. 多段階承認ワークフロー

ステータスインジケーター、条件付きスタイル、インタラクティブな編集機能を使用して、承認階層を追跡します。

8. 地理データの整理

国、州、都市を階層形式で表示し、データの可視化機能とエクスポート機能を利用できます。

パフォーマンスに関する考慮事項

  • オンデマンド読み込みを使用する:ノードの合計数が1,000を超えるデータセットの場合
  • 仮想化を有効にする(デフォルトで有効):スムーズなスクロールを実現します
  • 頻繁に更新されるセルでは複雑なテンプレートを避ける
  • 頻繁な再バインドではなく、ItemsSourceChangedイベントを使用する
  • 複数のノードを変更する場合は更新を一括処理する
  • 不要な場合はライブ更新(LiveNodeUpdateMode)を無効にする
  • データ構造に応じてFilterLevelの選択を最適化する

関連するスキル

サポートリソース


次のステップ: 実装のニーズに応じて、上記の該当するリファレンスファイルに進んでください。初期設定にはgetting-started.mdから始め、必要に応じてデータバインディング、列の設定、高度な機能を確認してください。

コメント