Отображение списка новостных статей в формах Xamarin из строки объектов Json - PullRequest
0 голосов
/ 15 сентября 2018

Я недавно приступил к разработке форм Xamarin для своего школьного проекта, и у меня возникают проблемы с отображением представления списка с содержимым из базы данных. Строка JSON, которую я получаю от веб-службы, выглядит так:

 [
    {
        "$id": "1",
        "intArticleID": 11,
        "strArticleTitle": "News 5                        ",
        "strArticlePhotoUrl": "doesItWork                                                  ",
        "strArticleURL": "www.youtube.com                                             "
    },
    {
        "$id": "2",
        "intArticleID": 10,
        "strArticleTitle": "News 3                        ",
        "strArticlePhotoUrl": "www.google.com                                              ",
        "strArticleURL": "man                                                         "
    },
    {
        "$id": "3",
        "intArticleID": 9,
        "strArticleTitle": "News 5                        ",
        "strArticlePhotoUrl": "www.mailroom.com                                            ",
        "strArticleURL": "www.youtube.com                                             "
    },
    {
        "$id": "4",
        "intArticleID": 2,
        "strArticleTitle": "News 2                        ",
        "strArticlePhotoUrl": "news.com                                                    ",
        "strArticleURL": "news.com                                                    "
    }
]

У меня есть класс, который я использую, чтобы установить строку сына в список объектов.

        namespace MIApp.Classes
        {
          public class Articles
          {
            public partial class ArticlesItems{
              [JsonProperty("$id")]
              public long Id { get; set; }

              [JsonProperty("intArticleID")]
              public long intArticleId { get; set; }

              [JsonProperty("strArticleTitle")]
              string strArticleTitle { get; set; }

              [JsonProperty("strArticlePhotoUrl")]
              string strArticlePhotoUrl { get; set; }

              [JsonProperty("strArticleURL")]
              string strArticleURL { get; set; }
          }

         public partial class ArticlesItems{
           public static List<ArticlesItems> FromJson(string json)
           {
             return JsonConvert.DeserializeObject<List<ArticlesItems>>(json);
           }
        }
}

}

Затем я вызываю функцию FromJson со строкой сына из моего кода здесь.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using MIApp.Classes;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;

    namespace MIApp
    {
     [XamlCompilation(XamlCompilationOptions.Compile)]
     public partial class HomePage : ContentPage
     {
       public HomePage ()
       {
          InitializeComponent ();
       }

       protected async override void OnAppearing()
       {
        base.OnAppearing();

        HttpClient client = new HttpClient();
        string url =     "https://example.net/api/News_Articles/GetNews_Articles";
        var response = await client.GetAsync(url);
        if (response.IsSuccessStatusCode)
        {
            string res = "";
            using (HttpContent content = response.Content)
            {
                Task<string> result = content.ReadAsStringAsync();
                res = result.Result;
                var ArticlesList = Articles.ArticlesItems.FromJson(res);
                GetListView.ItemsSource = ArticlesList;
                if (ArticlesList.Count > 0)
                    await DisplayAlert("List Item", ArticlesList["strArticleTitle"], "Ok");
                }
        }
        else
        {
            await DisplayAlert("Connection Error", "Please Connect to the internet and try again", "Ok");
        }
    }

}

}

Затем он отображается на этой странице XAML здесь:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MIApp.HomePage">
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Welcome to Xamarin.Forms!"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
            <ListView x:Name="GetListView">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="{Binding strArticleTitle}"/>
                        <TextCell Text="{Binding strArticleURL}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Моя проблема заключается в том, что он отображает правильное количество записей в представлении списка, но значения в записях списка не отображаются. Пожалуйста, помогите, спасибо

1 Ответ

0 голосов
/ 15 сентября 2018

DataTemplate принимает один корневой элемент, который обычно является ViewCell

Попробуйте код ниже

<DataTemplate>
    <ViewCell>
       <StackLayout>
            <Label Text="{Binding strArticleTitle}" />
            <Label Text="{Binding strArticleURL}" />
        </StackLayout>
    </ViewCell>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...