我在我的UWP(Windows 10)应用程序中有一个列表视图。
理想情况下,当应用程序启动时,它将加载100个项目。
当列表滚动到底部即到达列表视图中的最后一项时,将进行API调用,加载另外100个项目,以此类推。
以下是我的代码:
<ListView x:Name="lstSuggestions" Height="200" Width="250" Foreground="#333eb4" HorizontalAlignment="Left" Margin="60,10" SelectionChanged="lstSuggestions_SelectionChanged"></ListView>
以下调用绑定了列表视图(在应用程序启动时显示前100个项目):
public async void GetData(string Id, string limit)
{
string mainUrlForSuggestions = ApiUrl + "&id=" + d;
string finalSelCharas = "";
using (var httpClient = new HttpClient())
{
var dataUri = await httpClient.GetStringAsync(mainUrlForSuggestions);
JsonObject jsonObject = JsonObject.Parse(dataUri.ToString());
JsonArray jsonArray = jsonObject["payload"].GetArray();
foreach (JsonValue groupValue in jsonArray)
{
JsonObject groupObject = groupValue.GetObject();
lstSuggestionsAdd.Add(new SuggestedWords { Name = groupObject.GetNamedString("sug_name"), ID = groupObject.GetNamedString("id") });
}
lstSuggestions.ItemsSource = lstSuggestionsAdd;
}
}
在应用程序启动时,限制为100。一旦列表到达末尾,必须将限制设置为200或下一个100个项目,并再次进行API调用。
我尝试使用pointerEntered事件来实现这一点。但是,由于它只将listview分配的高度与指针高度匹配,因此无法实现所述功能,因为scrollviewer的高度可能会有所变化。我甚至尝试访问scrollviewer,但没有成功!
我还参考了以下URL:如何允许UWP ListView滚动到最后一个项目之后?&&检测WPF listview滚动条是否在底部?&&https://social.msdn.microsoft.com/Forums/windows/en-US/63b4b530-61d8-477f-af96-87e33260c919/uwa-how-to-detect-the-end-and-the-start-of-listview-and-load-more-data-items?forum=wpdevelop
但是,它们都没有在我的情况下实际起作用。
我尝试查找一个事件来实现此功能,但没有找到任何内容。
有人可以提供关于如何检测listview滚动是否到达末尾(列表中的最后一个项目)的想法吗?
请注意,我正在使用Windows 10 UWP应用程序,而不是win 8。
lstSuggestions_PointerEntered
函数在指针移动到 listview 区域/部分时被调用。它只是捕获指针是否在 listview UI 区域内。 - acelstSuggestions_PointerEntered
并不重要。您可以参考此答案:检测 WPF ListView 滚动条是否到达底部?,然而它在我的情况下没有起到帮助作用。 - aceItemSource
并在最后一个项目可见时触发加载。我以前在Xamarin和WP8上做过这个,所以我认为对于UWP来说应该是类似的。...我会尝试把它包装起来。 - Stefan