2016-12-30 4 views
0

Я новичок в C# и XAML и работаю над простым приложением Weather, которое позволяет искать город и штат и возвращает форматированный 10-дневный список прогнозов.C# & XAML - Показать JSON в ListView от Wunderground API

У меня возникли проблемы с отображением данных, полученных из Wunderground Weather API с использованием ListView. Это JSON я работаю, example.

Моя проблема: Как запустить все элементы списка с помощью шаблона в XAML, который отображает элементы свойств (icon_url, название, fcttext) после того, как мы получим результаты Wunderground API?

Вот моя модель:

 

    public class ForecastList 
     { 
      public class Forecastday 
      { 
       public string icon_url { get; set; } 
       public string title { get; set; } 
       public string fcttext { get; set; } 
      } 

      public class TxtForecast 
      { 
       public List forecastday { get; set; } 
      } 

      public class Forecast 
      { 
       public TxtForecast txt_forecast { get; set; } 
      } 

      public class RootObject 
      { 
       public Forecast forecast { get; set; } 
      } 
     } 

XAML:

<Stack Layout Padding="30"> <StackLayout Orientation="Horizontal"> <Entry HorizontalOptions="FillAndExpand" Placeholder="City" x:Name="City" /> <Entry Placeholder="2 letter state" x:Name="State" /> </StackLayout> <Button Text="Search" Clicked="OnClicked" /> <ListView ItemsSource="{Binding ListSource}"> <ListView.ItemTemplate> <DataTemplate> <Label Text="{Binding Title}" /> <Label Text="{Binding FctText}" /> <Image Source="{Binding IconUrl}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> </StackLayout>

И ViewModel:

 
    public class MainPageViewModel 
     { 
      public async Task GetWeatherAsync(string url) 
      { 
       HttpClient client = new HttpClient(); 
       client.BaseAddress = new Uri(url); 

       var response = await client.GetAsync(client.BaseAddress); 
       response.EnsureSuccessStatusCode(); 

       var JsonResult = response.Content.ReadAsStringAsync().Result; 

       var weather = JsonConvert.DeserializeObject(JsonResult); 
       SetList(weather); 
      } 

      public List ListSource { get; set; } 

      private string _title; 
      public string Title 
      { 
       get 
       { 
        return _title; 
       } 
       set 
       { 
        _title = value; 
       } 
      } 

      private string _fctText; 
      public string FctText 
      { 
       get 
       { 
        return _fctText; 
       } 
       set 
       { 
        _fctText = value; 
       } 
      } 

      private string _iconUrl; 
      public string IconUrl 
      { 
       get 
       { 
        return _iconUrl; 
       } 
       set 
       { 
        _iconUrl = value; 
       } 
      } 

      private void SetList(ForecastList.RootObject weather) 
      { 
       ListView listView = new ListView(); 
       var forecastList = weather.forecast.txt_forecast.forecastday; 
       List listSource = new List(forecastList); 

       ListSource = listSource; 

       listView.ItemsSource = ListSource; 
      } 
     } 

Ура!

ответ

1

необходимо преобразовывать сервера данных в нормальной форме с использованием Dto-х

, например:

Это мой Dto

public class SampleDto 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

Получение данных с сервера, как этот

public static async Task<T> GetResultFromApi<T>(string serviceUrl) 
    { 
     try 
     { 
      GetConnection(); 
      var response = await _httpClient.GetAsync(new Uri(yourUrl + serviceUrl)); 

      var stringAsync = await response.Content.ReadAsStringAsync(); 

      if (response.IsSuccessStatusCode) 
      { 
       var responseJson = stringAsync; 

       return JsonConvert.DeserializeObject<T>(responseJson); 
      } 

      LoggingManager.Error("Received error response: " + stringAsync); 
      return default(T); 
     } 
     catch (Exception exception) 
     { 
      LoggingManager.Error(exception); 
      return default(T); 
     } 
    } 

var gettingDto = await GetResultFromApi<SampleDto>(string.Format(client.BaseAddress)); 

и, наконец, преобразование myDto в исходный формат, который я хочу получить

var entity = ConvertGameDtoToEntity(gettingDto); 

public SampleEntity ConvertGameDtoToEntity(SampleDto gettingDto) 
{ 
     return new SampleEntity 
     { 
      Id = gettingDto.Id, 
      Name= gettingDto.Name, 
      Address = gettingDto.Address, 
     }; 
} 

ниже ссылку с четким описанием https://www.codeproject.com/Articles/36781/Serialization-and-Deserialization-in-ASP-NET-with

 Смежные вопросы

  • Нет связанных вопросов^_^