Example #1
0
        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();
        }