如何在Xamarin.Forms中使用XAML子集类CachingStrategy对ListView进行子类化

时间:2018-01-26 00:05:10

标签: c# listview xamarin.forms

我在XAML文件中设置了我自己的CachingStrategy继承子类的ListView

但是因为CachingStrategy有一个私有的setter,并且因为它是在其中一个构造函数中使用Parameter属性设置的,由于某种原因它被声明为内部和密封,似乎没有分类ListView的方法。

生成以下编译器错误:

  

找不到'CachingStrategy'的属性,可绑定属性或事件,或者值和属性之间的类型不匹配。

这是故意的吗? Parameter属性内部的原因是什么,更重要的是,是否有一种简洁的方法来继承ListView

作为一种解决方法,我最终做了以下工作:

public class MyListView : ListView
{
    public new ListViewCachingStrategy CachingStrategy
    {
        get => base.CachingStrategy;
        set => GetType().BaseType.GetProperty(nameof(CachingStrategy))
                        .SetValue(this, value);
    }
}

1 个答案:

答案 0 :(得分:6)

可以将ListView子类化并从XAML设置缓存策略,但这并不简单。文档在这里:

https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/performance/#Setting_the_Caching_Strategy_in_a_Subclassed_ListView

重要的是,缓存策略必须传递给构造函数,这可能是为什么没有办法使用属性设置它。

将ListView的子类和XAML中使用的相关代码片段从Xamarin文档复制到此处:

public class CustomListView : ListView
{
  public CustomListView (ListViewCachingStrategy strategy) : base (strategy)
  {
  }
  ...
}

然后在你的XAML中消费它:

<local:CustomListView>
  <x:Arguments>
    <ListViewCachingStrategy>RecycleElement</ListViewCachingStrategy>
  </x:Arguments>
</local:CustomListView>

不像在使用基类时那么优雅,遗憾的是。