Отображение Json в представлении сетки внутри представления сетки

#c# #json #text #gridview #uwp

#c# #json #текст #вид сетки #uwp

Вопрос:

У меня есть Json, как на изображении ниже:

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