C# Listview页面上的无限滚动
我有一个listview,它的数据是从服务器上的json获取的。 代码:C# Listview页面上的无限滚动,c#,json,listview,uwp,infinite-scroll,C#,Json,Listview,Uwp,Infinite Scroll,我有一个listview,它的数据是从服务器上的json获取的。 代码: ObservableCollection quizhomedatasource=新的ObservableCollection(); private bool incall=false,endoflist=false; 内部偏移量=1,halaman=1; 已加载私有void主网格(对象发送方、路由目标) { quizhomedatasource.Clear(); QuizList.ItemsSource=quizhomed
ObservableCollection quizhomedatasource=新的ObservableCollection();
private bool incall=false,endoflist=false;
内部偏移量=1,halaman=1;
已加载私有void主网格(对象发送方、路由目标)
{
quizhomedatasource.Clear();
QuizList.ItemsSource=quizhomedatasource;
进度测验(抵销);
}
已加载私有void QuizList_(对象发送方,路由目标)
{
ScrollViewer=GetScrollViewer(this.QuizList);
viewer.ViewChanged+=viewer\u ViewChanged;
}
私有void Viewer_ViewChanged(对象发送器,ScrollViewerViewChangedEventArgs e)
{
ScrollViewer视图=(ScrollViewer)发送方;
双进度=view.VerticalOffset/view.ScrollableHeight;
如果(进度>0.7&&!endoflist)
{
incall=true;
而(偏移量<哈拉曼)
{
progressquick(++偏移量);
}
}
其他的
{
incall=false;
}
}
公共静态ScrollViewer GetScrollViewer(DependencyObject depObj)
{
如果(depObj是ScrollViewer),则返回depObj作为ScrollViewer;
for(int i=0;i
我有一个问题,如果加载的页面超过页数,则会显示“statuskosong”。如何防止显示“statuskosong”和不再加载数据
注:
- “statuskosong”是数据=0时显示的文本
progressquick
方法时,都可以将statusKosong.Visibility
设置为Collapsed,然后在检测到quizhomedatasource.Count
为0时显示它
顺便说一下,您在ProgressQuike方法末尾的判断条件是quizhomedatasource.Count<0
,这不会发生,您可以将其更改为quizhomedatasource.Count==0
关于避免重复请求,我们可以在Viewer\u ViewChanged
回调中添加新的判断条件,并将progressquick
方法的返回值设置为Task:
private async void Viewer\u ViewChanged(对象发送方,ScrollViewServiceChangeDeventargs e)
{
ScrollViewer视图=(ScrollViewer)发送方;
双进度=view.VerticalOffset/view.ScrollableHeight;
如果(进度>0.7&&!endoflist&&!incall)
{
incall=true;
而(偏移量<哈拉曼)
{
等待进展
ObservableCollection<QuizHome> quizhomedatasource = new ObservableCollection<QuizHome>();
private bool incall = false, endoflist = false;
int offset = 1, halaman = 1;
private void MainGrid_Loaded(object sender, RoutedEventArgs e)
{
quizhomedatasource.Clear();
QuizList.ItemsSource = quizhomedatasource;
ProgressQuiz(offset);
}
private void QuizList_Loaded(object sender, RoutedEventArgs e)
{
ScrollViewer viewer = GetScrollViewer(this.QuizList);
viewer.ViewChanged += Viewer_ViewChanged;
}
private void Viewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
ScrollViewer view = (ScrollViewer)sender;
double progress = view.VerticalOffset / view.ScrollableHeight;
if (progress > 0.7 && !endoflist)
{
incall = true;
while (offset < halaman)
{
ProgressQuiz(++offset);
}
}
else
{
incall = false;
}
}
public static ScrollViewer GetScrollViewer(DependencyObject depObj)
{
if (depObj is ScrollViewer) return depObj as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = GetScrollViewer(child);
if (result != null) return result;
}
return null;
}
private async void ProgressQuiz(int offset)
{
try
{
urlPath = "https://mhnkp2.com/school/api-v3/fetch/tryout_paket_perkelas";
var values = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("halaman", offset.ToString()),
new KeyValuePair<string, string>("limit", "10"),
new KeyValuePair<string, string>("kelas", "2")
};
var httpClient = new HttpClient(new HttpClientHandler());
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("SCH-API-KEY", "SCH_KEnaBiDeplebt");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("token", token.Token);
var response = await httpClient.PostAsync(urlPath, new FormUrlEncodedContent(values));
response.EnsureSuccessStatusCode();
string jsonText = await response.Content.ReadAsStringAsync();
try
{
JsonObject jsonObject = JsonObject.Parse(jsonText);
JsonObject groupObject1 = jsonObject.GetObject();
double pages = groupObject1["total_page"].GetNumber();
double page = groupObject1["current_page"].GetNumber();
Buku file = new Buku();
file.PageNo = Convert.ToInt32(page);
file.Pages = Convert.ToInt32(pages);
halaman = file.Pages;
JsonArray jsonData1 = jsonObject["data"].GetArray();
foreach (JsonValue groupValue1 in jsonData1)
{
JsonObject groupObject2 = groupValue1.GetObject();
string title = groupObject2["judul"].GetString();
QuizHome quiz = new QuizHome();
quiz.Title = title;
quizhomedatasource.Add(quiz);
}
if (quizhomedatasource.Count < 0)
{
QuizList.Visibility = Visibility.Collapsed;
statusKosong.Visibility = Visibility.Visible;
}
}
}