我在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);
}
}
答案 0 :(得分:6)
可以将ListView子类化并从XAML设置缓存策略,但这并不简单。文档在这里:
重要的是,缓存策略必须传递给构造函数,这可能是为什么没有办法使用属性设置它。
将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>
不像在使用基类时那么优雅,遗憾的是。