在SFchart上没有显示JSON数据! Syncfusion

时间:2017-10-01 07:10:37

标签: json xamarin charts syncfusion

HELP !!!

所以我花了几天时间试图让我的数据显示在sfchart上,但是它不会在页面上显示任何内容,或者它只显示轴而不是实际数据,

  • 我将JSON数据反序列化,将其绑定到sf图表

我创建了Tabs,它们以XML代码或C#代码显示图形,但我还没有工作。 如果你能告诉我什么我做错了我会尝试复制并粘贴这里的代码

Xaml主页

<?xml version="1.0" encoding="utf-8"?>
<TabbedPage  xmlns:chart="clr-namespace:Syncfusion.SfChart.XForms;assembly=Syncfusion.SfChart.XForms" xmlns:local="clr-namespace:Drip" xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  x:Class="Drip.DripPage">


    <ContentPage Title= "Data Log">
                 <StackLayout>
                     <ListView x:Name="postsListView" HasUnevenRows="true" IsPullToRefreshEnabled="true" Refreshing='Handle_Refreshing'>
                         <ListView.Header>
                             <StackLayout  Orientation= "Horizontal" Padding="20,10,0,10" BackgroundColor="#88CCF1">
                                <Label Text="Entries" VerticalTextAlignment="Center" FontAttributes="Bold" TextColor="White"/>
                             <StackLayout HorizontalOptions="FillAndExpand">
                                 <Label Text="Litres Used " HorizontalTextAlignment="Center" FontAttributes="Bold" TextColor="White"/>
                             </StackLayout>
                                 <Label Text="Date/Time  " VerticalTextAlignment="Center" FontAttributes="Bold" TextColor="White"/>
                             </StackLayout>
                         </ListView.Header>
                     <ListView.ItemTemplate>
                         <DataTemplate >
                            <ViewCell>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                         <ColumnDefinition Width= "0.5*"/>
                                         <ColumnDefinition Width="0.5*"/>
                                         <ColumnDefinition Width="0.5*"/>                             
                                    </Grid.ColumnDefinitions>
                                <Label Text="{Binding Entry_id}" VerticalTextAlignment="Center" />
                                <Label Text="{Binding Field1}" Grid.Column="1" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"/>
                                <Label Text="{Binding Created_at}" Grid.Column="2" HorizontalTextAlignment="End" VerticalTextAlignment="Center"/>
                               </Grid>
                            </ViewCell>
                        </DataTemplate>
                     </ListView.ItemTemplate>
                 </ListView>
            </StackLayout>
  </ContentPage>


    <local:MyPage Title="Chart"/>


    <ContentPage Title= "Guage">

    <ContentPage.BindingContext>

        <local:RootObject></local:RootObject>

    </ContentPage.BindingContext>

     <chart:SfChart>

   <chart:SfChart.PrimaryAxis>

        <chart:CategoryAxis>

            <chart:CategoryAxis.Title>

                  <chart:ChartAxisTitle Text="Date"> </chart:ChartAxisTitle>

            </chart:CategoryAxis.Title>

         </chart:CategoryAxis>

   </chart:SfChart.PrimaryAxis>

   <chart:SfChart.SecondaryAxis>

       <chart:NumericalAxis>

           <chart:NumericalAxis.Title>

                 <chart:ChartAxisTitle Text="Amount of Water Used (in Litres)"></chart:ChartAxisTitle>

          </chart:NumericalAxis.Title>      

      </chart:NumericalAxis>   

     </chart:SfChart.SecondaryAxis>

      <chart:SfChart.Series>

         <chart:ColumnSeries ItemsSource="{Binding Feeds}" XBindingPath="Created_at" YBindingPath="Field1">

         </chart:ColumnSeries>

      </chart:SfChart.Series>

 </chart:SfChart>






    </ContentPage>
</TabbedPage>

主页背后的代码

using System.Net.Http;
using Newtonsoft.Json;
using Xamarin.Forms;
using System.Collections.ObjectModel;


using System.Collections;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;


namespace Drip
{


    public partial class DripPage : TabbedPage
    {
        void Handle_Refreshing(object sender, System.EventArgs e)
        {
            postsListView.ItemsSource = _data;
            postsListView.EndRefresh();
        }

        private const string Url = "https://thingspeak.com/channels/301726/field/1.json";
        private HttpClient _client = new HttpClient();
        private ObservableCollection<Feed> _data;


        public DripPage()
        {
            InitializeComponent();
        }

        protected override async void OnAppearing()
        {
            var content = await _client.GetStringAsync(Url);
            var data = JsonConvert.DeserializeObject<RootObject>(content);

            _data = new ObservableCollection<Feed>(data.Feeds.OrderByDescending(x => x.Created_at));
            postsListView.ItemsSource = _data;




            base.OnAppearing();
        }

    }
} 

c#splineSeries图表,然后在主xaml中引用代码

sing Newtonsoft.Json;
using Syncfusion.SfChart.XForms;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using Drip;

namespace ChartGettingStarted
{

    public class RootObject
    {

        public List<Feed> Feeds { get; set; }
    }

    public class Feed
    {
        public DateTime Created_at { get; set; }
        public int Entry_id { get; set; }
        public decimal Field1 { get; set; }
    }

    public class DripPage : ContentPage
    {
        private const string Url = "https://thingspeak.com/channels/301726/field/1.json";
        private HttpClient _client = new HttpClient();
        private ObservableCollection<Feed> _data;


        SfChart chart;
        SplineSeries series;

        public DripPage()
        {
            chart = new SfChart();

            CategoryAxis primaryAxis = new CategoryAxis();

            chart.PrimaryAxis = primaryAxis;

            //Initializing Secondary Axis
            NumericalAxis secondaryAxis = new NumericalAxis();

            chart.SecondaryAxis = secondaryAxis;
            series = new SplineSeries();
            Content = chart;
        }

        protected override async void OnAppearing()
        {
            var content = await _client.GetStringAsync(Url);
            var data = JsonConvert.DeserializeObject<RootObject>(content);
            _data = new ObservableCollection<Feed>(data.Feeds);

            series.ItemsSource = _data;
            series.XBindingPath = "Created_at";
            series.YBindingPath = "Field1";
            chart.Series.Add(series);

            base.OnAppearing();
        }


    }
}

模型

namespace Drip
{
    public class RootObject
    {

        public List<Feed> Feeds { get; set; }
    }
}

名称空间Drip

{
    public class Feed
    {
        public DateTime Created_at { get; set; }
        public int Entry_id { get; set; }
        public decimal Field1 { get; set; }
    }
}

namespace Drip
{
    public class Channel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Latitude { get; set; }
        public string Longitude { get; set; }
        public string Field1 { get; set; }
        public DateTime Created_at { get; set; }
        public DateTime Updated_at { get; set; }
        public string Elevation { get; set; }
        public int Last_entry_id { get; set; }
    }
}

谢天谢地!

1 个答案:

答案 0 :(得分:0)

我们已经分析了您的代码片段,并且您缺少为绑定上下文实例设置集合值而不是由RootObject类的INotifyPropertyChanged接口继承。我们已根据您的要求修改了样品。请从以下链接中找到附件。

SimpleSample

如果您对此有进一步的帮助,请告诉我们。