DataTemplateSelector CreateContent抛出InvalidOperationException

时间:2018-04-13 21:40:24

标签: c# xaml xamarin mvvm xamarin.forms

我正在制作一个自定义可水平滚动的ListView类型控件,我遇到了一个我无法解释的问题,而且我不能100%确定问题是否与我的问题一致代码,除非我误解了一些东西。

我已将问题提炼为最简单的形式,可在https://github.com/sparkeh9/XamarinFormsListViewIssue处找到。

所以,我有一个Horizo​​ntalListView控件,它使用一个非常简单的数据模板选择器(没有逻辑,返回单个数据模板)

See XAML screenshot

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>

编辑:回答了我自己的问题

1 个答案:

答案 0 :(得分:3)

我弄清楚我做错了什么 - 如果类型是DataTemplateSelector,那么你必须先调用ItemTemplateSelector.SelectTemplate( item, null )来生成模板,之后你可以调用CreateContent()

diff

我承诺这可以证明我的意思: https://github.com/sparkeh9/XamarinFormsListViewIssue/commit/f2f0d807d2d463d1fe9e6a89f0d3c0c7676a0761