2009-06-15 2 views
3

저는 Silverlight 개발을 처음 사용하고 있으며 현재 Charting 영역으로 모험 중입니다. ItemsSource (http://silverlight.net/forums/t/44166.aspx)를 사용하여 ColumnSeries를 데이터 소스에 바인딩하는 것이 얼마나 쉬운지를 보여주는 몇 가지 자습서를 따라 왔습니다.Silverlight Charting Toolkit의 ColumnSeries 문제

저는 캔버스에 차트를 프로그래밍 방식으로 추가하고 있습니다.

Chart BudgetChart = new Chart { Title = "budget", MaxHeight= 200, MaxWidth=500}; 
ColumnSeries cs = new ColumnSeries(); 
BudgetChart.Series.Add(cs); 
cs.Title = "blarg"; 
cs.ItemsSource = o.Budget; //returns List<Budget> 
cs.IndependentValueBinding = new System.Windows.Data.Binding("Budget"); 
cs.DependentValueBinding = new System.Windows.Data.Binding("Year"); 

이 코드는 정상적으로 컴파일됩니다. 그러나 디버깅 할 때이 오류는 을 던졌습니다. 그러나 ItemsSource에 많은 어려움을 겪고 있습니다. ItemsSource를 할당 할 때마다 Sys.InvalidOperationException이라는 오류가 발생합니다. ManagedRuntimeError 오류 # 4004 in control 'Xaml1': System.NullReferenceException System.NullReferenceException : 개체가 개체의 인스턴스로 설정되지 않았습니다. System.Windows.Control.DataVisualization.Charting.ColumnSeries. <> c__DisplayClass8.b__4()

도와주세요.이 오류는 나를 미치게합니다!

답변

1

바인딩 후에 ItemsSource 할당을 이동해보십시오. 또한 바인딩을 구성한 후 계열에 차트를 추가하십시오.

Chart BudgetChart = new Chart { Title = "budget", MaxHeight= 200, MaxWidth=500}; 
ColumnSeries cs = new ColumnSeries(); 
cs.Title = "blarg"; 
cs.IndependentValueBinding = new System.Windows.Data.Binding("Budget"); 
cs.DependentValueBinding = new System.Windows.Data.Binding("Year"); 

BudgetChart.Series.Add(cs); 

cs.ItemsSource = o.Budget; //returns List<Budget> 
+0

안녕 AnthonyWJones, 답장을 보내 감사 실패합니다. 내가 제안한대로 해봤지만 문제는 여전히 지속됩니다. 내가 시도 할 수있는 다른 제안? – hantu7

+0

도움이된다면 툴킷의 3 월 버전을 사용하고 있습니다. – hantu7

+0

나는 마침내 읽는 법을 배웠다. 나는 잘못 묶고 있었다. 종속 바인딩과 독립 바인딩간에 혼란스러워합니다. AnthonyWJones에게 도움을 주셔서 감사합니다. – hantu7

0

첫 번째 데이터 요소에 종속 값의 null/Nothing이 포함되지 않았는지 확인하십시오. 차트가 필요한 종속 형의 유형을 감지하여 실패 할 경우이 오류가 발생합니다. System.Windows.Controls.DataVisualization.Charting.ColumnSeries.GetAxes (DataPoint에 firstDataPoint)에서

at System.Windows.Controls.DataVisualization.Charting.DataPointSeriesWithAxes.GetAxes(DataPoint firstDataPoint, Func`2 independentAxisPredicate, Func`1 independentAxisFactory, Func`2 dependentAxisPredicate, Func`1 dependentAxisFactory) 

해결 방법은없는 것 같다. 하나의 옵션은 CanPlot (value)를 오버 라이딩하는 LinearAxis를 서브 클래스 화하는 것입니다. 현재 NumericAxis.CanPlot 값 == null이

/// <summary> 
    /// Returns a value indicating whether a value can plot. 
    /// </summary> 
    /// <param name="value">The value to plot.</param> 
    /// <returns>A value indicating whether a value can plot.</returns> 
    public override bool CanPlot(object value) 
    { 
     double val; 
     return ValueHelper.TryConvert(value, out val); 
    } 
0
<toolkit:Chart Grid.Row="1" Margin="10" Name="columnChart" Grid.Column="0" Width="400" ScrollViewer.HorizontalScrollBarVisibility="Visible"> 
       <toolkit:Chart.Series> 
        <toolkit:ColumnSeries 
         IndependentValueBinding="{Binding Path=Value}" 
            DependentValueBinding="{Binding Path=Key}" IsHitTestVisible="True" IsSelectionEnabled="True" SelectionChanged="ColumnSeries_SelectionChanged"> 
        </toolkit:ColumnSeries> 
       </toolkit:Chart.Series> 
       <toolkit:Chart.Template> 
        <ControlTemplate TargetType="toolkit:Chart"> 
         <chartingPrimitivesToolkit:EdgePanel x:Name="ChartArea"> 
          <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> 
          <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" /> 
         </chartingPrimitivesToolkit:EdgePanel> 
        </ControlTemplate> 
       </toolkit:Chart.Template> 
       <toolkit:Chart.Axes> 
        <toolkit:LinearAxis Orientation="Y" Minimum="0" Maximum="100" Interval="10" /> 
       </toolkit:Chart.Axes> 
      </toolkit:Chart> 

List<KeyValuePair<int, string>> lkvpGraph1 = new List<KeyValuePair<int, string>> { }; 
      KeyValuePair<int, string> kvpGraph1 = new KeyValuePair<int, string>(); 

      List<string> lstJob = new List<string>(); 
      lstJob = lR1Acceptance.Where(r1 => r1.FCode == Facility).Select(r1 => r1.Job_No).Distinct().ToList(); 
      double nWeeks = Math.Round((dtToDate - dtFromDate).Days/7.0, 0); 
      nWeeks++; 

      foreach (string job_no in lstJob) 
      { 
       int TotalSubmission = lR1Acceptance.Where(rr => rr.Job_No == job_no).Count(); 
       int TotalR1Accepted = lR1Acceptance.Where(rr => rr.Round_No == 1 && rr.Result == "A" && rr.Job_No == job_no).Count(); 
       int dAcceptance = (int)Math.Round(TotalR1Accepted * 100.0/TotalSubmission, 0); 
       if (TotalSubmission != 0) 
       { 
        kvpGraph1 = 
          new KeyValuePair<int, string>(dAcceptance, job_no); 
        lkvpGraph1.Add(kvpGraph1); 
       } 

      } 
      ((ColumnSeries)columnChart.Series[0]).ItemsSource = lkvpGraph1; 
관련 문제