Skip to content
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

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.

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

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

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

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

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

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

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

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

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

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.

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.


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

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

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

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

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

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

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