GridView加载太多项目太快

时间:2015-10-29 20:58:11

标签: c# xaml gridview uwp

GridView水平滚动,屏幕最多可显示10个项目。 但是,当页面加载时,GridView会变得疯狂,并要求在LoadMoreItemAsync中加载2475个项目。

我限制每次调用的获取功能,每次返回10个项目。它只是反复调用LoadMoreItemAsync

现在基本上当我甚至没有滚动GridView时,它只是加载它自己。

这是我使用的GridView

<GridView ItemsSource="{Binding Data}" IncrementalLoadingThreshold="0">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Image
                Margin="5"
                Stretch="UniformToFill"
                Source="{Binding Banner}"
            />
        </DataTemplate>
    </GridView.ItemTemplate>
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsWrapGrid MaximumRowsOrColumns="5" ItemWidth="192" ItemHeight="250" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

这里是

背后的代码
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync( uint count )
{
    Logger.Log( ID, string.Format( "Requesting to load {0} items", count ) );
    return Task.Run( async () =>
      {
          TaskCompletionSource<uint> ItemsLoaded = new TaskCompletionSource<uint>();

          ConnectedLoader.Connector = ( BookItem[] b ) =>
          {
              IEnumerable<T> Converted = Convert( b );
              uint i = 0;
              foreach ( T a in Converted )
              {
                  Add( a ); i++;
              }
              ItemsLoaded.SetResult( i );
          };

          ConnectedLoader.NextPage();

          return new LoadMoreItemsResult() { Count = await ItemsLoaded.Task };
      } ).AsAsyncOperation();
}

那么如何告诉GridView不要加载这么多项呢?

1 个答案:

答案 0 :(得分:0)

我明白了。问题似乎是我将GridView放在集线器中。这导致GridView不知道自集线器部分扩展以来它的限制在哪里。

我在这里问了一个类似的问题: ISupportIncrementalLoading inside ScrollViewer not supported?

但目前在那里没有正确答案。所以我保留这里,并希望有人能提供另一种解决方案。