Table of Contents

Migrating from WCT DataGrid

The Windows Community Toolkit (WCT) DataGrid (CommunityToolkit.WinUI.UI.Controls.DataGrid) was available for UWP and early WinUI apps but is now archived and no longer maintained. WinUI.TableView is a community-maintained replacement and recommended alternative that targets WinUI and the Uno Platform.

This guide helps developers moving from the WCT DataGrid to WinUI.TableView.

NuGet package change

Package
WCT DataGrid CommunityToolkit.WinUI.UI.Controls.DataGrid (archived)
WinUI.TableView WinUI.TableView

XAML namespace change

<!-- WCT DataGrid -->
xmlns:controls="using:CommunityToolkit.WinUI.UI.Controls"
<controls:DataGrid ... />

<!-- WinUI.TableView -->
xmlns:tv="using:WinUI.TableView"
<tv:TableView ... />

Column type mapping

WCT DataGrid WinUI.TableView Notes
DataGridTextColumn TableViewTextColumn Same purpose.
DataGridCheckBoxColumn TableViewCheckBoxColumn Same purpose.
DataGridComboBoxColumn TableViewComboBoxColumn Similar.
DataGridTemplateColumn TableViewTemplateColumn Same purpose. Uses CellTemplate / EditingTemplate.
(no equivalent) TableViewNumberColumn Uses NumberBox for editing.
(no equivalent) TableViewDateColumn Date picker editing.
(no equivalent) TableViewTimeColumn Time picker editing.
(no equivalent) TableViewToggleSwitchColumn Fluent toggle switch.
(no equivalent) TableViewHyperlinkColumn Hyperlink display.

Property mapping

WCT DataGrid property WinUI.TableView equivalent Notes
AutoGenerateColumns AutoGenerateColumns Same behavior.
IsReadOnly IsReadOnly Same behavior.
CanUserSortColumns CanSortColumns Same behavior.
CanUserReorderColumns CanReorderColumns Same behavior.
CanUserResizeColumns CanResizeColumns Same behavior.
FrozenColumnCount FrozenColumnCount Same behavior.
RowDetailsTemplate RowDetailsTemplate Same behavior.
RowDetailsVisibilityMode RowDetailsVisibilityMode Enum values map directly.
AreRowDetailsFrozen AreRowDetailsFrozen Same behavior.
HeadersVisibility HeadersVisibility TableViewHeadersVisibility mirrors DataGridHeadersVisibility.
RowHeight RowHeight Same behavior.
ColumnHeaderHeight HeaderRowHeight Renamed.
MinRowHeight RowMinHeight Renamed.
MinColumnWidth MinColumnWidth Same behavior.
MaxColumnWidth MaxColumnWidth Same behavior.
GridLinesVisibility GridLinesVisibility Similar enum values.
HorizontalGridLinesBrush HorizontalGridLinesStroke Renamed.
VerticalGridLinesBrush VerticalGridLinesStroke Renamed.
AlternatingRowBackground AlternateRowBackground Renamed.
SelectionMode SelectionMode Uses ListViewSelectionMode.
CurrentColumn (not directly available) Use CurrentCellSlot.Column index.
ClipboardCopyMode CanCopy + CopyToClipboard event Simpler model.
(no equivalent) CanPaste WCT DataGrid does not have built-in paste. WinUI.TableView does.
(no equivalent) ShowExportOptions WCT DataGrid does not have built-in CSV export.
(no equivalent) ConditionalCellStyles WCT DataGrid requires manual style triggers.
(no equivalent) RowContextFlyout / CellContextFlyout WCT DataGrid has no built-in context flyout.
(no equivalent) Column filtering WCT DataGrid has no built-in filtering. WinUI.TableView has an Excel-like filter flyout.

Event mapping

WCT DataGrid event WinUI.TableView equivalent Notes
AutoGeneratingColumn AutoGeneratingColumn Same purpose.
BeginningEdit BeginningEdit Same purpose. Cancelable.
PreparingCellForEdit PreparingCellForEdit Same purpose.
CellEditEnding CellEditEnding Same purpose.
CellEditEnded CellEditEnded Same purpose.
Sorting (custom event) Sorting In WCT DataGrid, sorting is not built-in; the event fires but no sort is applied. In WinUI.TableView, the default sort is applied unless Handled = true.
SelectionChanged SelectionChanged + CellSelectionChanged Inherited SelectionChanged + new CellSelectionChanged.
CopyingRowClipboardContent CopyToClipboard Renamed.
ColumnReordered ColumnReordered Same purpose.
LoadingRowGroup (no equivalent) WinUI.TableView does not support row grouping.
LoadingRow (no equivalent) WinUI.TableView does not have a LoadingRow event. Use ContainerContentChanging inherited from ListView.

Sorting

A key difference: the WCT DataGrid fires sorting events but does not apply sorting itself — your code must sort the source collection. WinUI.TableView applies sorting automatically via the internal AdvancedCollectionView.

WCT DataGrid pattern (manual sort):

dataGrid.Sorting += (s, e) =>
{
    // You must sort the collection yourself
    var sorted = e.Column.SortDirection == DataGridSortDirection.Ascending
        ? items.OrderBy(i => GetValue(i, e.Column))
        : items.OrderByDescending(i => GetValue(i, e.Column));
    dataGrid.ItemsSource = sorted.ToList();
    e.Column.SortDirection = ...;
};

WinUI.TableView (built-in sort):

<!-- No code needed for default sort behavior -->
<tv:TableView ItemsSource="{x:Bind Products}" />

For custom sort, set e.Handled = true in the Sorting event and apply your own SortDescription.

Filtering

WCT DataGrid has no built-in filtering. You had to filter the source collection manually.

WinUI.TableView has a built-in Excel-like column filter flyout with no extra code required:

<tv:TableView CanFilterColumns="True" /> <!-- CanFilterColumns is true by default -->

Cell selection

WCT DataGrid does not support cell selection — only row selection. WinUI.TableView supports individual cell selection, ranges, and combined cell+row modes. See Selection.

Features not available in WinUI.TableView

WCT DataGrid feature Status in WinUI.TableView
Row grouping ❌ Not supported
Accessible / Narrator support ❌ Not verified in WinUI.TableView

References