如何在ListView中向DataTemplate添加其他元素?

时间:2017-12-25 07:19:57

标签: c# xaml xamarin xamarin.forms xamarin.android

在我的Xamarin.Forms XAML文件中,我有一个列表,我在ImageCell内部使用DataTemplate来显示项目。到目前为止,我已经想出如何为每个项目显示两段文字和一张图片,但我还想添加一个按钮。

我尝试在ImageCell内放置一些东西,但是我收到了以下错误:

  

无法设置ImageCell的内容,因为它没有   ContentPropertyAttribute

我查了如何使用ContentPropertyAttribute,但documentation并没有真正解释如何使用它。

如何为每个DataTemplate添加其他元素?

    <ListView ItemsSource="{Binding}" x:Name="Results">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ImageCell ImageSource="{Binding picture}" Text="{Binding name}" Detail="{Binding category}">
                    <Button Text="test" />
                </ImageCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

3 个答案:

答案 0 :(得分:2)

  

ListView中的数据显示在单元格中。 每个单元格对应一行数据

由于您希望连续获得的数据多于ImageCell提供的数据,因此您可以使用ViewCell构建ListView行中显示的内容。

示例:

<DataTemplate>
    <ViewCell>
        <StackLayout Orientation="Horizontal">
            <Image ImageSource="{Binding picture}"/>
            <Label Text="{Binding name}" />
            <Button Text="Details" Command="{Binding DetailCommand}" />
        </StackLayout>
    </ViewCell>
</DataTemplate>

答案 1 :(得分:1)

您可以使用viewcell代替imagecell。在viewcell中你可以使用布局和那里的图像,标签和按钮

答案 2 :(得分:1)

而不是ImageCell,您应该使用ViewCell&amp;在ViewCell

中添加自定义元素
<ListView ItemsSource="{Binding}" x:Name="Results">
    <ListView.ItemTemplate>
        <DataTemplate>
           <ViewCell>
               <StackLayout BackgroundColor="#eee" Orientation="Vertical">
                   <StackLayout Orientation="Horizontal">
                       <Image Source="{Binding picture}" />
                       <Label Text="{Binding name}" TextColor="#f35e20" />
                       <Label Text="{Binding category}" TextColor="#f35e20" />
                       <Button Text="test" />
                   </StackLayout>
               </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>