2012-07-04 40 views
0

我正在關注本教程中的示例: 但不幸的是,他們的文檔非常模糊,我無法正常工作。如何在MVVM中使用AutoSeriesGenerator Visiblox

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

什麼我試圖做的是使用AutoSeriesGenerator創建一個新的系列自動爲我也補充一點,供LineSeries到主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事件,它是同樣的問題。它不會被調用一次,但會被多次調用,這對我來說沒有任何意義。

我該如何解決這個問題,謝謝。

回答

1

這讓我非常尷尬,因爲我一整天都在苦苦掙扎。當我發佈一個問題時,討論它,然後在幾分鐘後解決它:O。

我決定嘗試這個,它工作 - 非常緩慢! :(

在後面的代碼:

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

我應該已經確定了boundobject是一個業務對象和ただ