2017-10-01 83 views
0

幫助!沒有在SFchart上顯示JSON數據! Syncfusion

所以香港專業教育學院花了幾天時間嘗試只是讓我的數據,但是在sfchart或者顯示它不會在頁面上顯示任何東西,它只是顯示的軸,而不是實際的數據,

  • 我是反序列化JSON數據綁定到sf圖表

我已經創建了選項卡,可以顯示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; } 
    } 
} 

命名空間滴灌

{ 
    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; } 
    } 
} 

預先感謝您!

+0

你有兩個不同的類叫做DripPage - 一個是TabbedPage,一個是ContentPage,每個都在不同的命名空間中?我沒有看到任何讓我認爲帶有圖表邏輯的DripPage代碼被稱爲曾經被調用過的東西。我真的建議你擺脫多個頁面,並創建一個簡單的ContentPage和一個圖表。一旦你開始工作,你可以添加額外的頁面。 – Jason

+0

Ahh我不好意思,我從syncfusion獲取內容頁面時試圖將它集成到應用程序中。 –

+0

事情是,如果我製作一個簡單的內容頁面,如果json數據在內容頁面上,我怎樣才能調用json數據去我的列表視圖和圖表。相當新的xamarin,所以仍然不知道 –

回答

0

我們已經分析了您的代碼片段,並且缺少設置綁定上下文實例的集合值而不是由RootObject類的INotifyPropertyChanged接口繼承的代碼片段。我們已根據您的要求修改了樣本。請從下面的鏈接中找到附件。

SimpleSample

請讓我們知道,如果你有這個進一步的幫助。