【问题标题】:ListView items not completely loaded using xamarin.forms使用 xamarin.forms 未完全加载 ListView 项目
【发布时间】:2019-10-22 05:05:01
【问题描述】:

我的列表视图控制器没有加载所有元素,在这种情况下它只加载 1 个元素,在其他情况下它加载像 4 个但其他不加载

由于我测试了问题发生的位置,我知道问题出在 Frame 控制器上,这要归功于我的 List View 上的大多数项目都没有加载的框架

<ListView.ItemTemplate>
  <DataTemplate>
    <ViewCell>
      <Frame
          HeightRequest="100"
          Margin="10"
          HasShadow="True"
          CornerRadius="25"
          BackgroundColor="White">
        <Grid
            Padding="5">
          <Grid.RowDefinitions>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="*"/>
          </Grid.RowDefinitions>
          <Label
              Grid.Column="0"
              Grid.Row="0"
              Text="{Binding Name}"
              FontAttributes="Bold"
              FontSize="Large"
              HorizontalOptions="Start"
              VerticalOptions="Start">
          </Label>
          <Image
              HeightRequest="50"
              Grid.Row="0"
              Grid.Column="1"
              Source="{Binding TaskIcon}"
              HorizontalOptions="End"
              VerticalOptions="Start">
          </Image>
          <Label
              Grid.Row="1"
              Grid.Column="0"
              Text="{Binding Description}"
              FontAttributes="Bold"
              FontSize="Medium"
              HorizontalOptions="Start"
              VerticalOptions="End">
          </Label>
          <Button
              Grid.Row="1"
              Grid.Column="1"
              Text="{Binding IsDone}"
              TextColor="White"
              FontAttributes="Bold"
              VerticalOptions="CenterAndExpand"
              HorizontalOptions="Center"
              FontSize="Small"
              CornerRadius="100"
              BackgroundColor="LawnGreen">
          </Button>
        </Grid>
      </Frame>
    </ViewCell>
  </DataTemplate>
</ListView.ItemTemplate>

我提到的结果是我的项目加载不完整,如下图所示:

[已编辑] 我已将我的代码编辑如下,但错误仍然相同

<ListView
               SeparatorVisibility="None"
                    IsGroupingEnabled="True"
                    ItemsSource="{Binding TasksCollection}"
                    GroupDisplayBinding="{Binding Key}"
                    HasUnevenRows="True">
                    <ListView.GroupHeaderTemplate>
                        <DataTemplate>
                            <TextCell
                                Text="{Binding Key}"
                                TextColor="White"/>
                        </DataTemplate>
                    </ListView.GroupHeaderTemplate>
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Frame
                                    HeightRequest="150"
                                    Margin="10"
                                    HasShadow="True"
                                    CornerRadius="25"
                                    BackgroundColor="White">
                                    <Grid
                                        Padding="5">
                                    <Grid.GestureRecognizers>
                                        <TapGestureRecognizer Command="{Binding GridExpandCommand}"/>
                                    </Grid.GestureRecognizers>
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="2*"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
                                        <Label
                                            Grid.Column="0"
                                            Grid.Row="0"
                                            Text="{Binding Name}"
                                            FontAttributes="Bold"
                                            FontSize="Small"
                                            HorizontalOptions="Start"
                                            VerticalOptions="Start">
                                        </Label>
                                        <Image
                                            HeightRequest="25"
                                            Grid.Row="0"
                                            Grid.Column="1"
                                            Source="{Binding TaskIcon}"
                                            HorizontalOptions="End"
                                            VerticalOptions="Start">
                                        </Image>
                                        <Label
                                            Grid.Row="1"
                                            Grid.Column="0"
                                            Text="{Binding Description}"
                                            FontAttributes="Bold"
                                            FontSize="Small"
                                            HorizontalOptions="Start"
                                            VerticalOptions="End">
                                        </Label>
                                        <Button
                                            Grid.Row="1"
                                            Grid.Column="1"
                                            Text="{Binding IsDone}"
                                            TextColor="White"
                                            FontAttributes="Bold"
                                            VerticalOptions="CenterAndExpand"
                                            HorizontalOptions="Center"
                                            FontSize="Small"
                                            CornerRadius="100"
                                            BackgroundColor="LawnGreen">
                                        </Button>
                                    </Grid>
                                </Frame>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

【问题讨论】:

  • 如果您删除Frame,项目列表是否如您所愿?
  • @pinedax 是的,我不知道为什么
  • @AndrésQuirozValdovinos ,我的回答确切地告诉了你这一点以及原因,但你否认它并且没有显示你说解决该问题的代码,所以我认为这需要按原样关闭不可重现。
  • @IvanIčin 我已经更新了我的代码,我忘记了一些重要的事情,是我使用了分组选项
  • @Andrés Quiroz,你的问题现在解决了吗,如果是,请记得将有用的回复标记为答案,谢谢。

标签: xamarin.forms xamarin.android xamarin.forms.listview


【解决方案1】:

只有当您的布局不适合时才会发生这种情况(除了发送您可能会看到的空数据的琐碎问题),您试图将太大的项目放入太小的空间中。您应该设置图像的HeightRequestWidthRequest,并且可能还需要为标签设置LineBreakMode

【讨论】:

  • 我已经做到了,正如我的代码所示,但没有做任何事情,请问还有其他选择吗?
  • @AndrésQuirozValdovinos 你没有 - 你的布局显然不适合 - 你的框架是 100 高度(如果适合的话,最大),它有填充和两个相同的行,你想设置 50 的图像高度。它不能确定,做数学:)。
  • 我已经在我的代码中完成了它(不是在下面显示的,在我的实际代码中)但问题仍然存在,我增加了框架的高度并最小化了我的布局高度问题还是一样
【解决方案2】:

我设置了 ListView HasUnevenRows="True",它工作正常,没有任何问题。

<ListView HasUnevenRows="True" ItemsSource="{Binding models}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Frame
                            Margin="10"
                            BackgroundColor="White"
                            CornerRadius="25"
                            HasShadow="True"
                            HeightRequest="120">
                            <Grid Padding="5">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="2*" />
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Label
                                    Grid.Row="0"
                                    Grid.Column="0"
                                    FontAttributes="Bold"
                                    FontSize="Large"
                                    Text="{Binding Name}" />
                                <Image
                                    Grid.Row="0"
                                    Grid.Column="1"
                                    Source="{Binding TaskIcon}" />
                                <Label
                                    Grid.Row="1"
                                    Grid.Column="0"
                                    FontAttributes="Bold"
                                    FontSize="Medium"
                                    Text="{Binding Description}" />
                                <Button
                                    Grid.Row="1"
                                    Grid.Column="1"
                                    BackgroundColor="LawnGreen"
                                    CornerRadius="100"
                                    FontAttributes="Bold"
                                    FontSize="Small"
                                    Text="{Binding IsDone}"
                                    TextColor="White" />
                            </Grid>
                        </Frame>
                    </ViewCell>
                </DataTemplate>

            </ListView.ItemTemplate>
        </ListView>

【讨论】:

  • 感谢您的回答,但我已将属性 HasUnevenRows 设置为 true,但问题仍然存在,我还更新了我的帖子,添加了更多您想要查看的代码
  • 能否提供一个可以在github上重现您的问题的示例,我将下载您的示例进行测试。
猜你喜欢
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多