TreeDataGrid is designed around a model-first architecture:
Use these layers to map responsibilities from data source to visual output.
Primary contracts:
ITreeDataGridSourceFlatTreeDataGridSource<TModel>HierarchicalTreeDataGridSource<TModel>Responsibilities:
Columns, Rows, and SelectionItems input collectionSortBy)DragDropRows)Primary contracts:
IColumns, IColumn, IColumn<TModel>IRows, IRow, IRow<TModel>ICell, ITextCell, IExpanderCellResponsibilities:
Primary types:
TreeDataGridTreeDataGridRowsPresenter, TreeDataGridCellsPresenter, TreeDataGridColumnHeadersPresenter)TreeDataGridRow, TreeDataGridCell, specialized cell controls)Responsibilities:
CellPrepared, RowPrepared, CellClearing, RowClearing)Items to source.TreeDataGridItemsSourceView) and exposes row/column model collections.TreeDataGrid (header click) via ITreeDataGridSource.SortBy(...).Selection object:
TreeDataGrid delegates input handling to ITreeDataGridSelectionInteraction.This separation keeps concerns clear:
Feature behavior differs from expectations
Cause: one or more options in this scenario are configured differently (source type, column options, sort/selection/edit state).
Fix: compare your setup with the snippet in this article and verify runtime values on Source, Columns, and Selection.
Data changes are not visible in UI
Cause: model or collection notifications are missing, or a replaced collection/source is not re-bound.
Fix: ensure INotifyPropertyChanged/INotifyCollectionChanged flow is active and reassign Source after replacing underlying collections.