2012-07-04 2 views
0

이 자습서의 예제는 다음과 같습니다. 그러나 불행히도 설명서가 너무 흐려 제대로 작동하지 않습니다. 내가 뭘하려고 오전MVVM Visiblox에서 AutoSeriesGenerator를 사용하는 방법

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

는 기본 Y 축에 LineSeries의 것을 추가도 나를 위해 자동으로 새로운 시리즈를 만들 AutoSeriesGenerator를 사용하고 있습니다. 저는 여러분 중 일부가 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

나는 하루 종일 고민 중이므로 매우 당황 스럽다. 내가 질문을 올렸을 때 그것을 싫어하면 몇 분 후에 해결할 수 있습니다.

나는 이것을 시험해보기로 결심했다. 매우 느리다! 당신의 CustomLineSeries에서

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

또는 무엇 이건 : 당신의 뒤에 코드에서 :(

! 나는 boundobject는 비즈니스 오브젝트와 타 다되도록해야

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