我正在制作一个自定义可水平滚动的ListView类型控件,我遇到了一个我无法解释的问题,而且我不能100%确定问题是否与我的问题一致代码,除非我误解了一些东西。
我已将问题提炼为最简单的形式,可在https://github.com/sparkeh9/XamarinFormsListViewIssue处找到。
所以,我有一个HorizontalListView控件,它使用一个非常简单的数据模板选择器(没有逻辑,返回单个数据模板)
See Template Selector screenshot
我的问题是,当我使用模板选择器时,在调用ItemTemplateSelector.CreateContent()
以便开始基于模板生成UI控件时,它会抛出异常See exception screenshot,声称LoadTemplate属性不应该是空的。我查看了基类,发现这个属性是Func<object>
,它是私有的,只能通过调用特定的构造函数从外部设置。
如果我在XAML中指定文字项模板,一切都按预期工作,例如:
<controls:HorizontalListView.ItemTemplate>
<DataTemplate>
<Label Text="test"></Label>
</DataTemplate>
</controls:HorizontalListView.ItemTemplate>
编辑:回答了我自己的问题
答案 0 :(得分:3)
我弄清楚我做错了什么 - 如果类型是DataTemplateSelector,那么你必须先调用ItemTemplateSelector.SelectTemplate( item, null )
来生成模板,之后你可以调用CreateContent()
我承诺这可以证明我的意思: https://github.com/sparkeh9/XamarinFormsListViewIssue/commit/f2f0d807d2d463d1fe9e6a89f0d3c0c7676a0761