C# Listview页面上的无限滚动

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

我有一个listview,它的数据是从服务器上的json获取的。 代码:

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时显示的文本
如何防止显示“statuskosong”和再次加载数据

每次调用
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;
                                    }
                                }
                            }