0

私はこのチュートリアルの例に従っています: しかし、残念ながら、それらのドキュメントは非常に曖昧で、何も正しく動作させることができません.

http://www.visiblox.com/blog/posts/2011/06/13/data-binding-with-visiblox-charts/#asg

私がやろうとしているのは、AutoSeriesGenerator を使用して新しいシリーズを自動的に作成し、そのラインシリーズをプライマリ Y 軸に追加することです。Visiblox で良い経験をしてくださる方がいらっしゃることを願っています。彼らの例をC#で表現する必要があると私が考えた方法は次のとおりです。

 <local:WeatherStationsData x:Key="dataCollection">
            <local:WeatherStationTemperature>
                <local:HourTemperature Hour="1" Temperature="10" />
                <local:HourTemperature Hour="2" Temperature="14" />
            </local:WeatherStationTemperature>
            <local:WeatherStationTemperature>
                <local:HourTemperature Hour="1" Temperature="20" />
                <local:HourTemperature Hour="2" Temperature="19" />
            </local:WeatherStationTemperature>
        </local:WeatherStationsData>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot">
      <charts:Chart x:Name="Chart"
                    charts:AutoSeriesGenerator.XValuePath="Hour"
                    charts:AutoSeriesGenerator.YValuePath="Temperature"
                    charts:AutoSeriesGenerator.ChartSeriesProvider="LineSeries"
                    charts:AutoSeriesGenerator.ItemsSource="{StaticResource dataCollection}">
                    <charts:Chart.XAxis>
                <charts:LinearAxis />
            </charts:Chart.XAxis>
            <charts:Chart.YAxis>
                <charts:LinearAxis />
            </charts:Chart.YAxis>
        </charts:Chart>



  //X and Y points
   public class ChartDataPoint
    {
        public DateTime X { get; set; }
        public float Y { get; set; }
        public ChartDataPoint(DateTime X, float Y)
        {
            this.X = X;
            this.Y = Y;
        }
    }



  //represents a dataseries - collection of datapoints
   public class DataPointsCollection : ObservableCollection<ChartDataPoint>
    {
    }
 //the "dataseries"
 public class DataSeries : ObservableCollection<DataPointsCollection>
    {
    }

But it isn't working as expected.



       public IChartSeries CreateSeries(object targetParent, object boundObject)
            {
                LineSeries lineSeries = null;

                if (targetParent is LineSeries)
                {
                    lineSeries = new LineSeries();
                    lineSeries.YAxis = new LinearAxis();
                    AxisCollection.Add(lineSeries.YAxis);
                }
                return lineSeries;
            }

彼らのドキュメントによると、targetObject は IChartSeries がラップされているビジネス オブジェクトです。しかし、オブジェクトの代わりに取得しているのはコレクションです! そして、そのメソッドは常に複数回呼び出されます。つまり、多くの Lineseries が生成されます。CollectionChanged イベントを試しましたが、同じ問題です。一度呼び出されるのではなく、複数回呼び出されるので意味がありません。

どうすればこの問題を解決できますか、ありがとう。

4

1 に答える 1

0

私はこれに一日中苦労していたので、これは非常に恥ずかしいです. 質問を投稿してから数分後に解決するのが嫌いです。

私はこれを試してみることにしましたが、うまくいきました-非常に遅いです! :(

あなたのコードビハインドで:

private void Series_CollectionChanged(object sender,
         NotifyCollectionChangedEventArgs e)
{
        if(e.Action == NotifyCollectionChangedAction.Add)
        {
            var lineSeries = (LineSeries) MultiChart.Series[e.NewStartingIndex];
            if (!collection.Contains(lineSeries.YAxis))
            {

                lineSeries.YAxis = new LinearAxis();
                collection.Add(lineSeries.YAxis);   
            }
        }
        else if(e.Action == NotifyCollectionChangedAction.Reset )
        {
            collection.Clear();
        }
}

CustomLineSeries などで:

 public IChartSeries CreateSeries(object targetParent, object boundObject)
 {
   if (boundObject is DataPointsCollection)
   {
       LineSeries lineSeries = new LineSeries();
       return lineSeries;
   }
  return null;
}

バインドされたオブジェクトがビジネス オブジェクトであることを確認する必要がありました。

于 2012-07-04T15:44:02.470 に答える