#c# #json #text #gridview #uwp
#c# #json #текст #вид сетки #uwp
Вопрос:
У меня есть Json, как на изображении ниже:
Я хочу отобразить «основные» в виде сетки внутри вида сетки
XAML:
lt;GridView x:Name="asesmenGridView"gt; lt;GridView.ItemTemplategt; lt;DataTemplategt; lt;Grid x:Name="asesmenGrid"gt; lt;TextBlock x:Name="judulT" Text="{Binding Title}"/gt; lt;GridView x:Name="majorGridView" ItemsSource="{Binding DataContext.majordatasource, ElementName=asesmenGridView}"gt; lt;GridView.ItemTemplategt; lt;DataTemplate x:DataType="local:MajorClass"gt; lt;Gridgt; lt;TextBlock x:Name="kelasT" Text="{x:Bind Major}" /gt; lt;/Gridgt; lt;/DataTemplategt; lt;/GridView.ItemTemplategt; lt;/GridViewgt; lt;/DataTemplategt; lt;/GridView.ItemTemplategt; lt;/GridViewgt;
Код:
public MainPage() { this.InitializeComponent(); this.DataContext = this; } public Listlt;MajorClassgt; majordatasource { get; set; } = new Listlt;MajorClassgt;(); string urlPath = "https://.../choose-exam/2"; var httpClient = new HttpClient(new HttpClientHandler()); httpClient.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", tkn)); var response = await httpClient.GetAsync(urlPath); string jsonText = await response.Content.ReadAsStringAsync(); try { JsonArray jsonArray = JsonArray.Parse(jsonText); foreach (JsonValue groupValue in jsonArray) { string title = groupObject["title"].GetString(); JsonArray majorArray = groupObject["majors"].GetArray(); MajorClass majorC = new MajorClass(); foreach (JsonValue majorValue in majorArray) { JsonObject majorObject = majorValue.GetObject(); double majorID = majorObject["major_id"].GetNumber(); string major = majorObject["major"].GetString(); majorC.MajorID = (int)majorID; majorC.Major = major ","; majordatasource.Add(majorC); } Ujian ujian = new Ujian(); ujian.Title = title; ujiandatasource.Add(ujian); } asesmenGridView.ItemsSource = ujiandatasource;
Удзянский класс:
public class Ujian { public string Title { get; set; } public ObservableCollectionlt;MajorClassgt; majordatasource { get; set; } public Ujian() { Title = string.Empty; majordatasource = new ObservableCollectionlt;MajorClassgt;(); } public Ujian(string title) { Title = title; } } public class MajorClass { public int MajorID { get; set; } public string Major { get; set; } } }
Из приведенного выше кода мне не удалось отобразить его в виде сетки в виде сетки (извлекаемые данные являются только последними данными и отображаются повторно, как показано ниже).
Как с этим справиться?
Комментарии:
1. Работает ли следующее, какие-либо обновления для этой темы?
Ответ №1:
Основываясь на вашем дизайне, вам нужна структура данных списка вложений, и majorGridView
вы можете напрямую получить доступ majordatasource
к свойству Ujian. Пожалуйста , передайте majordatasource в ujian.majordatasource
, но не доступ к отдельному свойству majordatasource, находящемуся в классе страницы.
Например
Ujian ujian = new Ujian(); ujian.Title = title; ujian.majordatasource = majordatasource; ujiandatasource.Add(ujian)
Xaml
lt;GridView x:Name="majorGridView" ItemsSource="{Binding majordatasource}"gt;
Обновить
try { JsonArray jsonArray = JsonArray.Parse(jsonText); foreach (JsonValue groupValue in jsonArray) { var groupObject = groupValue.GetObject(); string title = groupObject["title"].GetString(); JsonArray majorArray = groupObject["majors"].GetArray(); var majordatasource = new ObservableCollectionlt;MajorClassgt;(); foreach (JsonValue majorValue in majorArray) { MajorClass majorC = new MajorClass(); JsonObject majorObject = majorValue.GetObject(); double majorID = majorObject["major_id"].GetNumber(); string major = majorObject["major"].GetString(); majorC.MajorID = (int)majorID; majorC.Major = major ","; majordatasource.Add(majorC); } Ujian ujian = new Ujian(); ujian.majordatasource = majordatasource; ujian.Title = title; ujiandatasource.Add(ujian); } } catch { }
Комментарии:
1. На
ujian.majordatasource = majordatasource;
. произошла ошибка:Cannot implicitly convert type 'System.Collections.Generic.Listlt;KipinSchool_Win10.PTO.MajorClassgt;' to 'System.Collections.ObjectModel.ObservableCollectionlt;KipinSchool_Win10.PTO.MajorClassgt;'
2. обновите эту строку
public Listlt;MajorClassgt; majordatasource { get; set; } = new Listlt;MajorClassgt;();
доpublic ObservableCollectionlt;MajorClassgt; majordatasource { get; set; } = new ObservableCollectionlt;MajorClassgt;();
3. Я изменил его, как и ваш код выше, но по-прежнему сталкиваюсь с той же проблемой, то есть только последние данные успешно извлекаются и отображаются повторно.
4. Вы обновили код xaml, как описано выше ?
5. Да, я изменил его с
ItemsSource="{Binding DataContext.majordatasource, ElementName=asesmenGridView}"
наItemsSource="{Binding majordatasource}"