public void UpdateCell(Xamarin.Forms.View cell) { if (_formsCell == cell && !CustomCell.IsForceLayout) { return; } CustomCell.IsForceLayout = false; if (_formsCell != null) { _formsCell.PropertyChanged -= CellPropertyChanged; } cell.PropertyChanged += CellPropertyChanged; if (_renderer == null) { CreateNewRenderer(cell); return; } var renderer = GetChildAt(0) as IVisualElementRenderer; var viewHandlerType = Registrar.Registered.GetHandlerTypeForObject(_formsCell) ?? DefaultRenderer; var reflectableType = renderer as System.Reflection.IReflectableType; var rendererType = reflectableType != null?reflectableType.GetTypeInfo().AsType() : (renderer != null ? renderer.GetType() : typeof(System.Object)); if (renderer != null && rendererType == viewHandlerType) { _formsCell = cell; _formsCell.DisableLayout = true; foreach (VisualElement c in _formsCell.Descendants()) { c.DisableLayout = true; } renderer.SetElement(_formsCell); Platform.SetRenderer(_formsCell, _renderer); _formsCell.DisableLayout = false; foreach (VisualElement c in _formsCell.Descendants()) { c.DisableLayout = false; } var viewAsLayout = _formsCell as Layout; if (viewAsLayout != null) { viewAsLayout.ForceLayout(); } UpdateNativeCell(); Invalidate(); return; } RemoveView(_renderer.View); Platform.SetRenderer(_formsCell, null); _formsCell.IsPlatformEnabled = false; _renderer.View.Dispose(); _formsCell = cell; _renderer = Platform.CreateRendererWithContext(_formsCell, Context); Platform.SetRenderer(_formsCell, _renderer); AddView(_renderer.View); UpdateNativeCell(); }