C# 从json延迟加载gridview

C# 从json延迟加载gridview,c#,json,gridview,uwp,lazy-loading,C#,Json,Gridview,Uwp,Lazy Loading,我在gridview中有一个延迟加载,它的数据来自JSON JSON示例: { "error": false, "total_data": 32, "data_per_page": "16", "current_page": 1, "total_page": 2, "current_total": 16, "data": [ { "id": "2613", "judul": "

我在gridview中有一个延迟加载,它的数据来自JSON

JSON示例:

{
    "error": false,
    "total_data": 32,
    "data_per_page": "16",
    "current_page": 1,
    "total_page": 2,
    "current_total": 16,
    "data": [
        {
            "id": "2613",
            "judul": "Kamus ID EN",
            "slug": "kamus-id-en",
            "cover": "https://mhnkp2.com/src/umum/cover/kamus_ID_EN-thumb.jpg",
            "path": "https://mhnkp2.com/school/dl/dodl/2613",
            "ukuran": "3504835",
            "formated_size": "3.34 MB",
            "fname": "kamus_ID_EN.pdf",
            "publish": "1",
            "urgent": "400",
            "kelas": "0",
            "nama_kelas": "Umum"
        },
XAML:


代码:

ObservableCollection数据源=新的ObservableCollection();
整数偏移=0;
已加载私有void主网格(对象发送方、路由目标)
{
itemGridView.ItemsSource=数据源;
肿瘤(1);
} 
公务舱布库
{
公共字符串Judul{get;set;}
}
专用异步void umm(整数偏移)
{
urlPath=”https://mhnkp2.com/school/api-v3/fetch/umum";
var httpClient=newhttpclient(newhttpclienthandler());
var值=新列表
{
新的KeyValuePair(“halaman”,offset.ToString()),
新的KeyValuePair(“限制”、“16”),
新的KeyValuePair(“SCH-API-KEY”、“SCH_KEnaBiDeplebt”)
};
var response=wait httpClient.PostAsync(urlPath,新表单URLEncodedcontent(值));
response.EnsureSuccessStatusCode();
string jsonText=await response.Content.ReadAsStringAsync();
尝试
{
double total=groupObject1[“total_data”]。GetNumber();
double pages=groupObject1[“总页数”]。GetNumber();
double page=groupObject1[“当前页面”]。GetNumber();
Buku文件=新的Buku();
file.PageNo=Convert.ToInt32(第页);
file.Pages=Convert.ToInt32(页);
file.Total=Convert.ToInt32(总计);
JsonArray jsonData1=jsonObject[“数据”].GetArray();
foreach(jsonData1中的JsonValue groupValue1)
{
JsonObject groupObject2=groupValue1.GetObject();
string title=groupObject2[“judul”].GetString();
Buku file1=新的Buku();
file1.Judul=标题;
datasource.Add(file1);
}
itemGridView.ItemsSource=数据源;
}
}
已加载私有void itemGridView_(对象发送方,RoutedEventArgs e)
{
ScrollViewer=GetScrollViewer(this.itemGridView);
viewer.ViewChanged+=viewer\u ViewChanged;
}
私有void Viewer_ViewChanged(对象发送器,ScrollViewerViewChangedEventArgs e)
{
ScrollViewer视图=(ScrollViewer)发送方;
双进度=view.VerticalOffset/view.ScrollableHeight;
//Debug.WriteLine(进度);
如果(进度>0.7&&!incall&&!endoflist)
{
incall=true;
busyindicator.IsActive=true;
Umum(++偏移量);
}
}
公共静态ScrollViewer GetScrollViewer(DependencyObject depObj)
{
如果(depObj是ScrollViewer),则返回depObj作为ScrollViewer;
for(int i=0;i
我有一个问题,gridview应该在第1页和第2页显示数据,但在gridview中,第2页显示的数据是第1页数据的重复,如下所示: 如何修复它

注:

  • 页面使用“offset”参数

  • 页面限制是JSON中的“总页面”


您只需将偏移值传递给加载的
MainGrid\u
,然后将偏移0设置为1

ObservableCollection<Buku> datasource = new ObservableCollection<Buku>();
int offset = 1; // set offset zero to one 
        private void MainGrid_Loaded(object sender, RoutedEventArgs e)
                    {
                        itemGridView.ItemsSource = datasource;
                        Umum(offset); // just change 1 to offset 
                    } 
    public class Buku
        {
            public string Judul { get; set; }
        }

            private async void Umum(int offset)
            {
                urlPath = "mhnkp2.com/school/api-v3/fetch/ktsp2006/kelas/1";
                var httpClient = new HttpClient(new HttpClientHandler());
                var values = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("halaman", offset.ToString()),
                    new KeyValuePair<string, string>("limit", "16"),
                    new KeyValuePair<string, string>("SCH-API-KEY", "SCH_KEnaBiDeplebt")
                };

                var response = await httpClient.PostAsync(urlPath, new FormUrlEncodedContent(values));
                response.EnsureSuccessStatusCode();
                string jsonText = await response.Content.ReadAsStringAsync();
                try
                {
                    double total = groupObject1["total_data"].GetNumber();
                    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);
                    file.Total = Convert.ToInt32(total);
                    JsonArray jsonData1 = jsonObject["data"].GetArray();
                    foreach (JsonValue groupValue1 in jsonData1)
                    {
                        JsonObject groupObject2 = groupValue1.GetObject();
                        string title = groupObject2["judul"].GetString();

                        Buku file1 = new Buku();
                        file1.Judul = title;
                        datasource.Add(file1);
                    }
                    itemGridView.ItemsSource = datasource;
                }
            }

            private void itemGridView_Loaded(object sender, RoutedEventArgs e)
                    {
                        ScrollViewer viewer = GetScrollViewer(this.itemGridView);
                        viewer.ViewChanged += Viewer_ViewChanged;
                    }

                    private void Viewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
                    {
                        ScrollViewer view = (ScrollViewer)sender;
                        double progress = view.VerticalOffset / view.ScrollableHeight;
                        //Debug.WriteLine(progress);
                        if (progress > 0.7 && !incall && !endoflist)
                        {
                            incall = true;
                            busyindicator.IsActive = true;
                            Umum(offset++);
                        }
                    }

                    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;
                    }
ObservableCollection数据源=新的ObservableCollection();
int offset=1;//将偏移量0设置为1
已加载私有void主网格(对象发送方、路由目标)
{
itemGridView.ItemsSource=数据源;
Umum(offset);//只需将1更改为offset
} 
公务舱布库
{
公共字符串Judul{get;set;}
}
专用异步void umm(整数偏移)
{
urlPath=“mhnkp2.com/school/api-v3/fetch/ktsp2006/kelas/1”;
var httpClient=newhttpclient(newhttpclienthandler());
var值=新列表
{
新的KeyValuePair(“halaman”,offset.ToString()),
新的KeyValuePair(“限制”、“16”),
新的KeyValuePair(“SCH-API-KEY”、“SCH_KEnaBiDeplebt”)
};
var response=wait httpClient.PostAsync(urlPath,新表单URLEncodedcontent(值));
response.EnsureSuccessStatusCode();
string jsonText=await response.Content.ReadAsStringAsync();
尝试
{
double total=groupObject1[“total_data”]。GetNumber();
double pages=groupObject1[“总页数”]。GetNumber();
double page=groupObject1[“当前页面”]。GetNumber();
Buku文件=新的Buku();
file.PageNo=Convert.ToInt32(第页);
file.Pages=Convert.ToInt32
ObservableCollection<Buku> datasource = new ObservableCollection<Buku>();
int offset = 0;
        private void MainGrid_Loaded(object sender, RoutedEventArgs e)
                    {
                        itemGridView.ItemsSource = datasource;
                        Umum(1);
                    } 
    public class Buku
        {
            public string Judul { get; set; }
        }

            private async void Umum(int offset)
            {
                urlPath = "https://mhnkp2.com/school/api-v3/fetch/umum";
                var httpClient = new HttpClient(new HttpClientHandler());
                var values = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("halaman", offset.ToString()),
                    new KeyValuePair<string, string>("limit", "16"),
                    new KeyValuePair<string, string>("SCH-API-KEY", "SCH_KEnaBiDeplebt")
                };

                var response = await httpClient.PostAsync(urlPath, new FormUrlEncodedContent(values));
                response.EnsureSuccessStatusCode();
                string jsonText = await response.Content.ReadAsStringAsync();
                try
                {
                    double total = groupObject1["total_data"].GetNumber();
                    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);
                    file.Total = Convert.ToInt32(total);
                    JsonArray jsonData1 = jsonObject["data"].GetArray();
                    foreach (JsonValue groupValue1 in jsonData1)
                    {
                        JsonObject groupObject2 = groupValue1.GetObject();
                        string title = groupObject2["judul"].GetString();

                        Buku file1 = new Buku();
                        file1.Judul = title;
                        datasource.Add(file1);
                    }
                    itemGridView.ItemsSource = datasource;
                }
            }

            private void itemGridView_Loaded(object sender, RoutedEventArgs e)
                    {
                        ScrollViewer viewer = GetScrollViewer(this.itemGridView);
                        viewer.ViewChanged += Viewer_ViewChanged;
                    }

                    private void Viewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
                    {
                        ScrollViewer view = (ScrollViewer)sender;
                        double progress = view.VerticalOffset / view.ScrollableHeight;
                        //Debug.WriteLine(progress);
                        if (progress > 0.7 && !incall && !endoflist)
                        {
                            incall = true;
                            busyindicator.IsActive = true;
                            Umum(++offset);
                        }
                    }

                    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;
                    }
ObservableCollection<Buku> datasource = new ObservableCollection<Buku>();
int offset = 1; // set offset zero to one 
        private void MainGrid_Loaded(object sender, RoutedEventArgs e)
                    {
                        itemGridView.ItemsSource = datasource;
                        Umum(offset); // just change 1 to offset 
                    } 
    public class Buku
        {
            public string Judul { get; set; }
        }

            private async void Umum(int offset)
            {
                urlPath = "mhnkp2.com/school/api-v3/fetch/ktsp2006/kelas/1";
                var httpClient = new HttpClient(new HttpClientHandler());
                var values = new List<KeyValuePair<string, string>>
                {
                    new KeyValuePair<string, string>("halaman", offset.ToString()),
                    new KeyValuePair<string, string>("limit", "16"),
                    new KeyValuePair<string, string>("SCH-API-KEY", "SCH_KEnaBiDeplebt")
                };

                var response = await httpClient.PostAsync(urlPath, new FormUrlEncodedContent(values));
                response.EnsureSuccessStatusCode();
                string jsonText = await response.Content.ReadAsStringAsync();
                try
                {
                    double total = groupObject1["total_data"].GetNumber();
                    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);
                    file.Total = Convert.ToInt32(total);
                    JsonArray jsonData1 = jsonObject["data"].GetArray();
                    foreach (JsonValue groupValue1 in jsonData1)
                    {
                        JsonObject groupObject2 = groupValue1.GetObject();
                        string title = groupObject2["judul"].GetString();

                        Buku file1 = new Buku();
                        file1.Judul = title;
                        datasource.Add(file1);
                    }
                    itemGridView.ItemsSource = datasource;
                }
            }

            private void itemGridView_Loaded(object sender, RoutedEventArgs e)
                    {
                        ScrollViewer viewer = GetScrollViewer(this.itemGridView);
                        viewer.ViewChanged += Viewer_ViewChanged;
                    }

                    private void Viewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
                    {
                        ScrollViewer view = (ScrollViewer)sender;
                        double progress = view.VerticalOffset / view.ScrollableHeight;
                        //Debug.WriteLine(progress);
                        if (progress > 0.7 && !incall && !endoflist)
                        {
                            incall = true;
                            busyindicator.IsActive = true;
                            Umum(offset++);
                        }
                    }

                    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;
                    }