C# 从json延迟加载gridview
我在gridview中有一个延迟加载,它的数据来自JSON JSON示例: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": "
{
"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;
}