Я застрял на этом несколько часов. Я использую IGDB API для приложения, которое я создаю. Итак, я пытаюсь получить ListBox, чтобы показать название игры, обложку и разработчика. Мне удалось сделать так, чтобы все они отображались в списке без проблем, но главная проблема возникает тогда, когда я просто хочу показать одного разработчика в списке, список показывает все вовлеченные компании плюс разработчика, потому что API возвращает массив вовлеченных компаний, и внутри этих вовлеченных компаний тело разработчика возвращает логическое значение, чтобы указать, какой из них является разработчиком. Я могу видеть это в своей голове, если разработчик верен, тогда покажите разработчику и удалите другие вовлеченные компании. Вот изображение того, что появляется, когда я запускаю свой запрос:
Изображение запроса
Я выделил его красным. Из этого списка все, что мне нужно, это Bung ie, так как они разработчики. Так что, на мой взгляд, у меня есть ListBox и вложенный в него ListView:
BrowseGamesView
<ListBox ItemsSource="{Binding Games}"
Width="390"
Height="500"
Grid.Row="4">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Column="0"
Grid.Row="0"
Grid.RowSpan="2"
Margin="0 0 10 0">
<Image Source="{Binding cover.image_id, Converter={StaticResource stringToImage}}"
Stretch="Fill"
Height="70"
Width="60"/>
</Border>
<TextBlock Text="{Binding name}"
FontWeight="Bold"
Grid.Column="1"
Grid.Row="0"/>
<ListView Grid.Column="1"
Grid.Row="1"
ItemsSource="{Binding involved_companies}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding company.name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
В моей ViewModel у меня есть метод для создания запроса, а также содержит коллекцию ObservableCollection (Games).
BrowseGamesViewModel
public ObservableCollection<Game> Games { get; set; }
public async void MakeQuery()
{
var games = await IGDBHelper.GetGames(Query);
Games.Clear();
foreach(var game in games)
{
Games.Add(game);
}
}
В моем классе Helper я получаю игры
IGDBHelper
public static async Task<List<Game>> GetGames(string query)
{
List<Game> games = new List<Game>();
string myJson = "search \"{0}\"; fields name, cover.url, cover.image_id, involved_companies.developer, involved_companies.company.name; limit 500;";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("user-key", "key hidden");
var response = await client.PostAsync(BASE_URL_GAMES, new StringContent(string.Format(myJson, query), Encoding.UTF8, "application/json"));
var responseString = await response.Content.ReadAsStringAsync();
games = JsonConvert.DeserializeObject<List<Game>>(responseString);
}
return games;
}
И все модели являются конкретными классами для Json
public class Game
{
public int id { get; set; }
public Cover cover { get; set; }
public List<InvolvedCompany> involved_companies { get; set; }
public string name { get; set; }
}
public class InvolvedCompany
{
public int id { get; set; }
public Company company { get; set; }
public bool developer { get; set; }
}
public class Company
{
public int id { get; set; }
public string name { get; set; }
}
public class Cover
{
public int id { get; set; }
public string image_id { get; set; }
public string url { get; set; }
}
Итак, чтобы повторить, мне нужно как-то просто показать имя разработчика, удалив остальную часть вовлеченные компании из списка. Я попробовал несколько вещей от конвертеров до попытки этого в классе конвертеров, и каждый раз я получаю исключения для нуля.