public void EnsureFormsTemplate(DataTemplate template, PositionInfo positionInfo)
        {
            if (ViewCell?.View == null)
            {
                var templateContent = template.CreateContent();

                if (templateContent is VirtualViewCell vc)
                {
                    ViewCell = vc;
                }
                else
                {
                    VirtualViewCell.ThrowInvalidDataTemplateException();
                }
            }

            ViewCell.Update(positionInfo);

            ViewCell.BindingContext = positionInfo.BindingContext;

            if (containerView == null)
            {
                containerView = new UIContainerView(ViewCell.View)
                {
                    Frame            = ContentView.Frame,
                    AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth
                };

                ContentView.AddSubview(containerView);
            }
        }
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            var template = templates.ElementAtOrDefault(viewType);

            var templateContent = template.CreateContent();

            if (templateContent is VirtualViewCell viewCell)
            {
                var viewHolder = new RvItemHolder(viewCell, CreateViewContainer(parent.Context, viewCell.View));

                clickListener = new RvViewHolderClickListener(viewHolder, rvh =>
                {
                    if (rvh.PositionInfo == null || rvh.PositionInfo.Kind != PositionKind.Item)
                    {
                        return;
                    }

                    var p = new ItemPosition(rvh.PositionInfo.SectionIndex, rvh.PositionInfo.ItemIndex);

                    var selected = !rvh.ViewCell.IsSelected;

                    rvh.ViewCell.IsSelected = selected;

                    if (selected)
                    {
                        Element.SetSelected(p);
                    }
                    else
                    {
                        Element.SetDeselected(p);
                    }
                });

                viewHolder.ItemView.SetOnClickListener(clickListener);

                return(viewHolder);
            }

            VirtualViewCell.ThrowInvalidDataTemplateException();
            return(null);
        }
 public RvItemHolder(VirtualViewCell viewCell, View itemView)
     : base(itemView)
 {
     ViewCell = viewCell;
 }
 public UwpListViewItem(VirtualViewCell viewCell)
 {
     ViewCell        = viewCell;
     DefaultStyleKey = typeof(UwpListViewItem);
 }