如何实现INativeElementView?

时间:2016-08-13 05:31:34

标签: c# listview xamarin.forms tableviewcell

我试图在Xamarin.Forms xaml页面中实现ListViewCachingStrategy=RecycleElement,所有内容都正确显示,直到我尝试滚动。然后我得到一个异常,说需要实现INativeElementView。我在每个原生平台的ui设计器中设计了视图,并为每个设计器都有一个自定义渲染器。如果我使用RetainElement而不是RecycleElement,则不会发生此崩溃。有什么想法或建议吗?

编辑:我在设计器中创建的视图称为FeeViewCell,如果我理解的话,那就是应该实现INativeElementView的地方(在FeeViewCell.cs中)。我现在的问题是,转换为元素会返回一个System.InvalidCastException,表示指定的强制转换无效。这是我的代码实现INativeElementView

public Element Element { get { return this.ToView() as Element; } } 我在Xamarin论坛here.

上也提到了这个问题

1 个答案:

答案 0 :(得分:0)

需要在自定义单元类上实现INativeNativeView接口。在我在iOS中的示例中,我在自定义渲染器中提供了一个来自pcl的项目,例如FeeCell。 这是我的自定义渲染器的一部分

public class FeeCellRenderer : ViewCellRenderer
    {
        public override UIKit.UITableViewCell GetCell(Cell item, UIKit.UITableViewCell reusableCell, UIKit.UITableView tv)
        {
            var x = (FeeCell)item;
            //Do whatever you need to here.
         }
      }

这是我的自定义ui类的一部分:

public partial class FeeViewCell : UITableViewCell, INativeElementView
{
    public static readonly NSString Key = new NSString(nameof(FeeViewCell));
    Element _element;
public Element Element
        {
            get { return _element; }
            set { _element = value; }
        }
}

它也可以这样做:

public Element Element
        {
            get { return new FeeCell(); }
        }