如何解决如何在 xamarin 形式的可绑定布局的数据模板选择器中获取列表大小
我想根据可绑定布局的 itemSource 大小显示不同的数据模板。我尝试使用 DataTemplateSelector,但无法访问父列表大小。如何在 DataTemplateSelector 中获取大小。
<StackLayout
x:Name="dynamicStack"
BackgroundColor="White"
BindableLayout.ItemTemplateSelector="{StaticResource brandMultipleTemplate}"
BindableLayout.ItemsSource="{Binding CategoryBrand}"
HorizontalOptions="FillAndExpand"
Spacing="0"
VerticalOptions="FillAndExpand" />
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Key="SingleBrandTemplate" />
<DataTemplate x:Key="TwoBrandTemplate">
<AbsoluteLayout
Margin="5"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand">
<ffi:CachedImage
AbsoluteLayout.LayoutBounds="0.5,0.5"
AbsoluteLayout.LayoutFlags="PositionProportional"
Source="{Binding Brandlogo}" />
</AbsoluteLayout>
</DataTemplate>
<selector:CategoryBrandTemplateSelector
x:Key="brandMultipleTemplate"
SingleBrand="{StaticResource SingleBrandTemplate}"
TwoBrand="{StaticResource TwoBrandTemplate}" />
</ResourceDictionary>
</ContentPage.Resources>
class CategoryBrandTemplateSelector : DataTemplateSelector
{
public DataTemplate SingleBrand { get; set; }
public DataTemplate TwoBrand { get; set; }
public DataTemplate FourBrand { get; set; }
public DataTemplate MultiPageBrand { get; set; }
protected override DataTemplate OnSelectTemplate(object item,BindableObject container)
{
var list = (List<CategoryBrand>)container.GetValue;
if(list.Count == 4)
{
return FourBrand;
} else if(list.Count == 2)
{
return TwoBrand;
} else if(list.Count > 4)
{
return MultiPageBrand;
} else
{
return SingleBrand;
}
}
}
在选择器中,系统抛出了无法转换为List的异常。
解决方法
将容器类型转换为 ListView 并从 ListView 获取 CategoryBrandTemplateSelector 中的 ItemSource。
protected override DataTemplate OnSelectTemplate (object item,BindableObject container)
{
var listView = container as ListView;
var list = listView?.ItemsSource as List<CategoryBrand>;
var count = list?.Count;
//....
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。