繁体   English   中英

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

[英]How to subclass a ListView with XAML set CachingStrategy in Xamarin.Forms

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

但是因为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);
    }
}

可以将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>

遗憾的是,它并不像使用基类那样优雅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM