Xamarin的ListView
定义了一个1参数构造函数,如下所示:
public ListView([Parameter("CachingStrategy")] ListViewCachingStrategy cachingStrategy)
因此,可以在Xaml中使用CachingStrategy
:
<ListView CachingStrategy="RecycleElement" .../>
我想知道我怎么能做同样的事情。以下代码不会编译,因为ParameterAttribute
是Xamarin.Forms的内部代码:
public ItemListControl([Parameter("IsReadOnly")] bool isReadOnly)
我从Xamarin.Forms复制了类ParameterAttribute
,以及上面的编译,但对Xaml处理没有影响。这是课程,供参考:
[AttributeUsage(AttributeTargets.Parameter)]
internal sealed class ParameterAttribute : Attribute
{
public ParameterAttribute(string name)
{
Name = name;
}
public string Name { get; }
}
我有什么遗漏吗?
答案 0 :(得分:2)
为简化起见,我建议为IsReadOnly
创建BindableProperty
。但是你总是可以使用x:Arguments
将参数传递给构造函数:
<local:ItemListControl ...>
<x:Arguments>
<x:Boolean>true</x:Boolean>
</x:Arguments>
</local:ItemListControl>
编辑 - 1
你可以使用一个hack - (我不建议这样做,因为这可以在XAMLC编译中change anytime with an update) - 但你可以确保命名空间与定义时的内部命名空间相同参数属性。
namespace Xamarin.Forms
{
[AttributeUsage(AttributeTargets.Parameter)]
internal sealed class ParameterAttribute : Attribute
{
public ParameterAttribute(string name)
{
Name = name;
}
public string Name { get; }
}
}
XAML的用法如下:
<local:ItemListControl IsReadOnly="true" .. />
编辑 - 2 如果将XAMLCompilation应用于主机控件/页面,则此hack似乎才有效。