Cell Types
Shiny.Maui.TableView provides 15 built-in cell types. All cells inherit from CellBase and share a common set of properties for titles, descriptions, icons, borders, and selection behavior.
Common Cell Properties
Section titled “Common Cell Properties”All cells inherit these properties from CellBase:
| Property | Type | Default | Description |
|---|---|---|---|
Title |
string |
"" |
Primary text |
TitleColor |
Color? |
null |
Title color |
TitleFontSize |
double |
-1 |
Title font size (-1 = use global) |
TitleFontFamily |
string? |
null |
Title font family |
TitleFontAttributes |
FontAttributes? |
null |
Title styling (Bold, Italic, None) |
Description |
string |
"" |
Subtitle text below title |
DescriptionColor |
Color? |
null |
Description color |
DescriptionFontSize |
double |
-1 |
Description font size |
DescriptionFontFamily |
string? |
null |
Description font family |
DescriptionFontAttributes |
FontAttributes? |
null |
Description styling |
HintText |
string |
"" |
Hint text to the right of the title |
HintTextColor |
Color? |
null |
Hint color |
HintTextFontSize |
double |
-1 |
Hint font size |
HintFontFamily |
string? |
null |
Hint font family |
HintFontAttributes |
FontAttributes? |
null |
Hint styling |
IconSource |
ImageSource? |
null |
Icon on the left |
IconSize |
double |
-1 |
Icon dimensions |
IconRadius |
double |
-1 |
Icon corner radius |
CellBackgroundColor |
Color? |
null |
Cell background |
SelectedColor |
Color? |
null |
Background color when tapped |
IsSelectable |
bool |
true |
Whether the cell responds to taps |
IsEnabled |
bool |
true |
Disabled cells are dimmed (0.4 opacity) |
CellHeight |
double |
-1 |
Fixed cell height |
BorderColor |
Color? |
null |
Cell border color |
BorderWidth |
double |
-1 |
Cell border width |
BorderRadius |
double |
-1 |
Cell border corner radius |
UseFeedback |
bool |
true |
Haptic click on cell tap |
LabelCell
Section titled “LabelCell”Displays a title with an optional value text on the right. Use for read-only display and information rows.
<tv:LabelCell Title="Version" ValueText="1.0.0" Description="Latest stable release" />| Property | Type | Default | Description |
|---|---|---|---|
ValueText |
string |
"" |
Text displayed on the right side |
ValueTextColor |
Color? |
null |
Value text color |
ValueTextFontSize |
double |
-1 |
Value font size |
ValueTextFontFamily |
string? |
null |
Value font family |
ValueTextFontAttributes |
FontAttributes? |
null |
Bold, Italic, or None |
SwitchCell
Section titled “SwitchCell”A cell with a toggle switch for boolean values.
<tv:SwitchCell Title="Wi-Fi" On="{Binding WifiEnabled, Mode=TwoWay}" OnColor="#34C759" />| Property | Type | Default | Description |
|---|---|---|---|
On |
bool |
false |
Switch state (two-way bindable) |
OnColor |
Color? |
null |
Switch color when on |
CheckboxCell
Section titled “CheckboxCell”A cell with a native checkbox control.
<tv:CheckboxCell Title="Accept Terms" Checked="{Binding Accepted, Mode=TwoWay}" AccentColor="#007AFF" />| Property | Type | Default | Description |
|---|---|---|---|
Checked |
bool |
false |
Checkbox state (two-way bindable) |
AccentColor |
Color? |
null |
Checkbox color |
SimpleCheckCell
Section titled “SimpleCheckCell”A cell that shows/hides a checkmark on tap. Useful for selection lists without a native checkbox control.
<tv:SimpleCheckCell Title="Option A" Checked="{Binding OptionA, Mode=TwoWay}" AccentColor="Green" />| Property | Type | Default | Description |
|---|---|---|---|
Checked |
bool |
false |
Check state (two-way bindable) |
Value |
object? |
null |
Associated value |
AccentColor |
Color? |
null |
Checkmark color |
RadioCell
Section titled “RadioCell”Radio button selection within a section. Cells within the same section are mutually exclusive. Use the RadioCell.SelectedValue attached property on the parent TableSection to bind the selected value.
<tv:TableSection Title="Theme" tv:RadioCell.SelectedValue="{Binding SelectedTheme, Mode=TwoWay}"> <tv:RadioCell Title="Light" Value="Light" /> <tv:RadioCell Title="Dark" Value="Dark" /> <tv:RadioCell Title="System" Value="System" /></tv:TableSection>| Property | Type | Default | Description |
|---|---|---|---|
Value |
object? |
null |
The value this radio button represents |
AccentColor |
Color? |
null |
Radio indicator color |
CommandCell
Section titled “CommandCell”A tappable cell with a disclosure arrow that executes a command. Inherits all properties from LabelCell.
<tv:CommandCell Title="Privacy Policy" ValueText="View" Command="{Binding PrivacyCommand}" ShowArrow="True" KeepSelectedUntilBack="True" />| Property | Type | Default | Description |
|---|---|---|---|
Command |
ICommand? |
null |
Command to execute on tap |
CommandParameter |
object? |
null |
Parameter passed to command |
ShowArrow |
bool |
true |
Show disclosure arrow |
KeepSelectedUntilBack |
bool |
false |
Keep highlight until page reappears |
ButtonCell
Section titled “ButtonCell”A full-width button-style cell for primary or destructive actions.
<tv:ButtonCell Title="Sign Out" Command="{Binding SignOutCommand}" ButtonTextColor="Red" />| Property | Type | Default | Description |
|---|---|---|---|
Command |
ICommand? |
null |
Command to execute |
CommandParameter |
object? |
null |
Parameter passed to command |
ButtonTextColor |
Color? |
null |
Button text color |
TitleAlignment |
TextAlignment |
Center |
Text alignment |
EntryCell
Section titled “EntryCell”A cell with an inline text entry field.
<tv:EntryCell Title="Email" ValueText="{Binding Email, Mode=TwoWay}" Placeholder="user@example.com" Keyboard="Email" />| Property | Type | Default | Description |
|---|---|---|---|
ValueText |
string |
"" |
Entry text (two-way bindable) |
Placeholder |
string |
"" |
Placeholder text |
PlaceholderColor |
Color? |
null |
Placeholder color |
Keyboard |
Keyboard |
Default |
Keyboard type (Default, Email, Numeric, Telephone, Url, Chat) |
IsPassword |
bool |
false |
Mask input |
MaxLength |
int |
-1 |
Max characters (-1 = unlimited) |
TextAlignment |
TextAlignment |
End |
Text alignment |
CompletedCommand |
ICommand? |
null |
Command executed on return key |
ValueTextColor |
Color? |
null |
Entry text color |
Mask |
string? |
null |
Input mask (# = digit slot, other characters are literals) |
FormattedValueText |
string |
"" |
Read-only masked display value |
Accessory |
KeyboardAccessoryView? |
null |
Bar docked to the top of the soft keyboard (iOS + Android) |
AccessoryPreset |
KeyboardAccessoryPreset |
None |
Done, Navigation, NavigationAndDone |
FieldGroup |
string? |
null |
Scopes accessory prev/next to a subset of cells |
IsAutoCompleteEnabled |
bool |
true |
False switches off autofill, autocorrect, prediction and spell check |
Input masking
Section titled “Input masking”Same engine as TextEntry: # is a digit slot and every other character is a
literal inserted as the user types. ValueText holds the raw digits — so the value you bind and
validate is never the punctuation — while FormattedValueText holds what is on screen. The keyboard
and max length are set from the mask.
<tv:EntryCell Title="Phone" Mask="(###) ###-####" ValueText="{Binding Phone, Mode=TwoWay}" />With the field showing (555) 123-4567, ValueText is 5551234567.
Keyboard accessory
Section titled “Keyboard accessory”A bar docked to the top of the soft keyboard while the cell has focus — see
Keyboard Accessory for the full API and platform matrix.
On a settings form the useful shape is prev/next plus Done, with FieldGroup keeping the arrows inside
one section instead of walking every input on the page:
<tv:TableSection Title="Payment"> <tv:EntryCell Title="Card" Mask="#### #### #### ####" FieldGroup="payment" AccessoryPreset="NavigationAndDone" ValueText="{Binding Card, Mode=TwoWay}" /> <tv:EntryCell Title="Expiry" Mask="##/####" FieldGroup="payment" AccessoryPreset="NavigationAndDone" ValueText="{Binding Expiry, Mode=TwoWay}" /></tv:TableSection>TableView is not virtualized, so unlike a CollectionView every cell on the page is realized and
prev/next can reach all of them.
Blazor supports Mask and IsAutoCompleteEnabled. There is no accessory bar on Blazor — see
Keyboard Accessory.
DatePickerCell
Section titled “DatePickerCell”Tapping anywhere on the cell opens the native date picker dialog.
<tv:DatePickerCell Title="Birthday" Date="{Binding BirthDate, Mode=TwoWay}" Format="D" MinimumDate="1900-01-01" MaximumDate="2025-12-31" />| Property | Type | Default | Description |
|---|---|---|---|
Date |
DateTime? |
null |
Selected date (two-way bindable) |
InitialDate |
DateTime |
2000-01-01 |
Date shown in picker when no date is set |
MinimumDate |
DateTime |
1900-01-01 |
Earliest selectable date |
MaximumDate |
DateTime |
2100-12-31 |
Latest selectable date |
Format |
string |
"d" |
Date format string ("d", "D", or custom) |
ValueTextColor |
Color? |
null |
Value text color |
TimePickerCell
Section titled “TimePickerCell”Tapping anywhere on the cell opens the native time picker dialog. Supports 24-hour mode and minute intervals (iOS sets UIDatePicker.MinuteInterval natively; on other platforms the selected time is snapped to the nearest interval).
<tv:TimePickerCell Title="Alarm" Time="{Binding AlarmTime, Mode=TwoWay}" Format="T" Use24Hour="True" MinuteInterval="15" />| Property | Type | Default | Description |
|---|---|---|---|
Time |
TimeSpan |
00:00:00 |
Selected time (two-way bindable) |
Format |
string |
"t" |
Time format string ("t", "T", or custom) |
Use24Hour |
bool |
false |
Use 24-hour format instead of AM/PM |
MinuteInterval |
int |
1 |
Minute increment step (e.g. 5, 10, 15). iOS enforces natively; others snap on selection |
ValueTextColor |
Color? |
null |
Value text color |
TextPickerCell
Section titled “TextPickerCell”Tapping the cell opens a native dropdown/spinner picker for selecting from a list of items. Bind by index (SelectedIndex) or by value (SelectedItem). A SelectedItem set from code or a binding is reflected in the cell’s value label and the picker selection, and re-syncs if ItemsSource is populated asynchronously — so the cell shows the current value without the user having to open the picker first. Use DisplayMember to show a property of complex items.
<!-- by value, with a display member --><tv:TextPickerCell Title="Lens" ItemsSource="{Binding Cameras}" DisplayMember="Name" SelectedItem="{Binding SelectedCamera, Mode=TwoWay}" PickerTitle="Choose a camera" />
<!-- by index --><tv:TextPickerCell Title="Color" ItemsSource="{Binding Colors}" SelectedIndex="{Binding SelectedColorIndex, Mode=TwoWay}" PickerTitle="Choose a color" />| Property | Type | Default | Description |
|---|---|---|---|
ItemsSource |
IList? |
null |
List of items |
SelectedIndex |
int |
-1 |
Selected index (two-way bindable) |
SelectedItem |
object? |
null |
Selected item (two-way bindable; reflects in the value label) |
DisplayMember |
string? |
null |
Property name for display text |
PickerTitle |
string? |
null |
Title shown on picker dialog |
SelectedCommand |
ICommand? |
null |
Command executed on selection |
ValueTextColor |
Color? |
null |
Value text color |
NumberPickerCell
Section titled “NumberPickerCell”Tapping the cell opens a prompt dialog for numeric input with min/max constraints.
<tv:NumberPickerCell Title="Font Size" Number="{Binding FontSize, Mode=TwoWay}" Min="8" Max="72" Unit="pt" />| Property | Type | Default | Description |
|---|---|---|---|
Number |
int? |
null |
Selected number (two-way bindable) |
Min |
int |
0 |
Minimum value |
Max |
int |
9999 |
Maximum value |
Unit |
string |
"" |
Unit suffix displayed after the number (e.g., “pt”, “px”) |
PickerTitle |
string |
"Enter a number" |
Dialog title |
SelectedCommand |
ICommand? |
null |
Command executed on selection |
ValueTextColor |
Color? |
null |
Value text color |
DurationPickerCell
Section titled “DurationPickerCell”Tapping the cell opens hour/minute pickers with “hr”/“min” labels in a FloatingPanel. The value is clamped to the configured min/max range. Requires the page to be a ShinyContentPage.
<tv:DurationPickerCell Title="Session Length" Duration="{Binding SessionLength, Mode=TwoWay}" MaxDuration="4:00:00" MinuteInterval="5" />| Property | Type | Default | Description |
|---|---|---|---|
Duration |
TimeSpan? |
null |
Selected duration (two-way bindable) |
MinDuration |
TimeSpan |
00:00:00 |
Minimum duration |
MaxDuration |
TimeSpan |
24:00:00 |
Maximum duration |
MinuteInterval |
int |
5 |
Minute increment step |
Format |
string |
h\:mm |
Display format string |
PickerTitle |
string |
"Select Duration" |
Title shown in the FloatingPanel |
SelectedCommand |
ICommand? |
null |
Command executed on selection |
ValueTextColor |
Color? |
null |
Value text color |
DoneText |
string |
"Done" |
Confirm button text |
CancelText |
string |
"Cancel" |
Cancel button text |
PickerCell
Section titled “PickerCell”A full-page picker that navigates to a dedicated selection page on tap. Supports both single and multiple selection.
<!-- Single selection --><tv:PickerCell Title="Country" ItemsSource="{Binding Countries}" SelectionMode="Single" SelectedItem="{Binding SelectedCountry, Mode=TwoWay}" PageTitle="Select Country" ShowArrow="True" />
<!-- Multiple selection --><tv:PickerCell Title="Hobbies" ItemsSource="{Binding Hobbies}" SelectionMode="Multiple" MaxSelectedNumber="3" SelectedItems="{Binding SelectedHobbies, Mode=TwoWay}" PageTitle="Select Hobbies" />| Property | Type | Default | Description |
|---|---|---|---|
ItemsSource |
IEnumerable? |
null |
Items to pick from |
SelectedItem |
object? |
null |
Selected item (two-way, single mode) |
SelectedItems |
IList? |
null |
Selected items (two-way, multiple mode) |
SelectionMode |
SelectionMode |
Single |
Single or Multiple |
MaxSelectedNumber |
int |
0 |
Max selections (0 = unlimited) |
UsePickToClose |
bool |
false |
Auto-close picker when max selections reached |
UseAutoValueText |
bool |
true |
Auto-generate display text from selections |
DisplayMember |
string? |
null |
Property name for display text |
SubDisplayMember |
string? |
null |
Property name for subtitle text |
PageTitle |
string |
"Select" |
Picker page title |
ShowArrow |
bool |
true |
Show disclosure arrow |
KeepSelectedUntilBack |
bool |
false |
Keep highlight until page returns |
SelectedCommand |
ICommand? |
null |
Command executed on selection change |
AccentColor |
Color? |
null |
Checkmark color on picker page |
CustomCell
Section titled “CustomCell”A cell that hosts any custom MAUI view in the accessory area.
<tv:CustomCell Title="Progress"> <tv:CustomCell.CustomContent> <ProgressBar Progress="0.75" /> </tv:CustomCell.CustomContent></tv:CustomCell>
<!-- Full-width custom content --><tv:CustomCell UseFullSize="True"> <tv:CustomCell.CustomContent> <Grid Padding="16"> <Label Text="Full-width custom layout" /> </Grid> </tv:CustomCell.CustomContent></tv:CustomCell>| Property | Type | Default | Description |
|---|---|---|---|
CustomContent |
View? |
null |
Custom view to display |
UseFullSize |
bool |
false |
Use full cell width for content (hides title/icon) |
Command |
ICommand? |
null |
Command on tap |
LongCommand |
ICommand? |
null |
Command on long press |
ShowArrow |
bool |
false |
Show disclosure arrow |
KeepSelectedUntilBack |
bool |
false |
Keep highlight until page returns |


