dotnet/maui · error · InvalidOperationException
Implement INativeElementView on cell renderer: {ContentCell.
Error message
Implement INativeElementView on cell renderer: {ContentCell.GetType().AssemblyQualifiedName} What it means
ContextActionCell.Element getter boxes ContentCell as INativeElementView and throws InvalidOperationException if it is not. The cell context-actions feature relies on the underlying cell renderer implementing INativeElementView so that the Xamarin Element can be retrieved; if the registered cell renderer type lacks that interface, context actions cannot function and the contract is broken.
Source
Thrown at src/Compatibility/Core/src/iOS/ContextActionCell.cs:77
public bool IsOpen
{
get { return ScrollDelegate.IsOpen; }
}
ContextScrollViewDelegate ScrollDelegate
{
get { return (ContextScrollViewDelegate)_scroller.Delegate; }
}
Element INativeElementView.Element
{
get
{
var boxedCell = ContentCell as INativeElementView;
if (boxedCell == null)
{
throw new InvalidOperationException($"Implement {nameof(INativeElementView)} on cell renderer: {ContentCell.GetType().AssemblyQualifiedName}");
}
return boxedCell.Element;
}
}
public void Close()
{
if (_scroller == null)
return;
_scroller.ContentOffset = new PointF(0, 0);
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
View on GitHub (pinned to f377ff1c5e)
Solutions
- Implement INativeElementView on the custom cell renderer (provide the Element property).
- Verify the renderer type reported in the message; register or fix the correct renderer.
- Avoid using ContextActions on cells whose renderers are not under your control.
Example fix
// before
public class MyCell : UITableViewCell { /* no INativeElementView */ }
// after
public class MyCell : UITableViewCell, INativeElementView
{
public Element Element { get; set; }
} Defensive patterns
Strategy: type-guard
Validate before calling
if (!(ContentCell is INativeElementView))
throw new InvalidOperationException($"Cell renderer {ContentCell.GetType()} must implement INativeElementView to use ContextActions."); Type guard
static bool SupportsContextActions(UITableViewCell cell) => cell is INativeElementView;
Prevention
- Implement INativeElementView on every custom cell renderer.
- Verify the registered renderer type before using ContextActions.
- Prefer built-in cell renderers when possible.
When it happens
Trigger: Using ContextActions on a Cell whose registered iOS cell renderer does not implement INativeElementView; a custom Cell renderer registered without INativeElementView; a ViewCell renderer replacement from a third party.
Common situations: Registering a custom cell renderer via [assembly: ExportCell] that forgets to implement INativeElementView; upgrading a renderer package that drops the interface; mixing ViewCell with custom renderers that bypass the default.
Related errors
- No UIViewController found to present.
- You MUST invoke LoadApplication () before calling base.Finis
- call Forms.Init() before this
- InsertPageBefore is not supported globally on iOS, please us
- PopAsync is not supported globally on iOS, please use a Navi
AI-assisted analysis of dotnet/maui@f377ff1c5e (2026-08-13).
Data as JSON: /api/errors/926c803254ab7bc5.
Report an issue: GitHub.