Я хочу показать список продуктов в Xamarin (VS 2017), использующих API, но при запуске моего приложения он показывает мне пустой список (как показано на изображении)
для вышеуказанного я проверяю через POSTMAN, что услуга доступна для использования
затем я создаю службу ApiServices, которая использует API:
APISERVICE.CS:
public async Task<Response> GetList<T>(string urlBase, string servicePrefix, string controller)
{
try
{
var client = new HttpClient();
client.BaseAddress = new Uri(urlBase);
var url = string.Format("{0}{1}", servicePrefix, controller);
var response = await client.GetAsync(url);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
return new Response
{
IsSuccess = false,
Message = result,
};
}
var list = JsonConvert.DeserializeObject<List<T>>(result);
return new Response
{
IsSuccess = true,
Message = "Ok",
Result = list,
};
}
catch (Exception ex)
{
return new Response
{
IsSuccess = false,
Message = ex.Message,
};
}
}
затем в моей ProductsViewModel я вызываю метод GetList и передаю параметры:
PRODUCTOSVIEWMODEL.CS:
public ObservableCollection<Product> Productos { get { return this.productos; }
set { this.SetValue(ref this.productos, value); }
}
private ObservableCollection<Product> productos;
private ApiService apiService;
public ProductosViewModel()
{
this.apiService = new ApiService();
this.LoadProductos();
}
private async void LoadProductos()
{
var response = await this.apiService.GetList<Product>("https://salesapiservices.azurewebsites.net", "/api", "/Products");
if (!response.IsSuccess)
{
await Application.Current.MainPage.DisplayAlert("Error", response.Message, "Aceptar");
return;
}
var list = (List<Product>)response.Result;
Productos = new ObservableCollection<Product>(list);
}
наконец, на мой взгляд, я показываю то, что хочу, с помощью элемента:
<ContentPage xmlns = "http://xamarin.com/schemas/2014/forms"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
x:Class = "Fundamentos.Views.ProductosPage"
BindingContext = "{Binding Main, Source = {StaticResource Locator}}"
Title = "Productos">
<ContentPage.Content>
<StackLayout
BindingContext = "{Binding Productos}"
Padding = "4">
<ListView
ItemsSource = "{Binding Productos}">
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Я прикрепляю свою модель продукта:
public class Product
{
public int ProductId { get; set; }
public string Description { get; set; }
public string Remarks { get; set; }
public string ImagePath { get; set; }
public Decimal Price { get; set; }
public bool IsAvailable { get; set; }
public DateTime PublishOn { get; set; }
public string ImageFullPath
{
get
{
if (string.IsNullOrEmpty(this.ImagePath))
{
return "noproduct";
}
return $"https://salesbackend.azurewebsites.net/{this.ImagePath.Substring(1)}";
}
}
public override string ToString()
{
return this.Description;
}
}
Я проверяю, что пришел JSON:
Стоит упомянуть, что я использую шаблон MVVM, и я создал экземпляр класса ProductsViewModel в MainViewModel, я просмотрел код и не могу найти ошибку!
любая помощь для меня? Следите за своими комментариями





Поскольку модель, которую вы привязываете к своему ListView, представляет собой сложный тип, вам необходимо определить собственный макет для вашего ListView.
Вы можете сослаться на приведенный ниже код:
<ListView ItemsSource = "{Binding Productos}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text = "{Binding Description}"
FontSize = "Large"
FontAttributes = "Bold"
HorizontalTextAlignment = "Start"
Margin = "20,0,0,0"
VerticalTextAlignment = "Center"
>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
вернуть новый ответ {}; Что такое ответ в вашем коде? Это класс или Httpresponsemessage?