2012-07-04 33 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是一个业务对象和ただ