2009-06-15 8 views
3

Ich bin neu in der Silverlight-Entwicklung und bin derzeit in der Charting-Region. Ich habe mehrere Tutorials verfolgt, die zeigen, wie einfach es ist, eine ColumnSeries mithilfe von ItemsSource (http://silverlight.net/forums/t/44166.aspx) an eine Datenquelle zu binden.ColumnSeries von Silverlight Charting Toolkit Probleme

Ich bin programmatisch ein Diagramm zu einer Leinwand hinzufügen.

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"); 

Dieser Code ist in Ordnung. Jedoch, wenn ich es debugge, ist dieser Fehler werfen Allerdings habe ich eine Menge Schwierigkeiten mit ItemsSource erlebt. Bei jeder Zuweisung der ItemsSource erhalte ich eine Fehlermeldung, dass es sich um Sys.InvalidOperationException: ManagedRuntimeError-Fehler # 4004 im Steuerelement 'Xaml1' handelt: System.NullReferenceException System.NullReferenceException: Objekt wurde nicht auf eine Instanz eines Objekts festgelegt. bei System.Windows.Control.DataVisualization.Charting.ColumnSeries. <> c__DisplayClass8.b__4()

Bitte helfen, dieser Fehler macht mich verrückt !!!

Antwort

1

Versuchen Sie, die ItemsSource-Zuweisung nach den Bindungen zu verschieben. Fügen Sie die Serie dem Diagramm hinzu, nachdem Sie ihre Bindungen konfiguriert haben.

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

Hallo AnthonyWJones, Vielen Dank für Ihre Antwort. Ich habe versucht, das zu tun, was Sie vorgeschlagen haben, aber das Problem besteht immer noch. Irgendwelche anderen Vorschläge, die ich versuchen könnte? – hantu7

+0

Wenn es Hilfe ist, verwende ich die März-Version des Toolkits. – hantu7

+0

Ich habe endlich gelernt zu lesen. Ich war falsch gebunden. Ich war verwirrt zwischen den abhängigen und unabhängigen Bindungen. Vielen Dank für Ihre Hilfe AnthonyWJones. – hantu7

0

Stellen Sie sicher, dass Ihr erster Datenpunkt kein null/Nothing im abhängigen Wert enthält. Der Fehler tritt auf, wenn das Diagramm versucht, den Typ der abhängigen abhängigen Achsen zu erkennen, und schlägt fehl.

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

bei System.Windows.Controls.DataVisualization.Charting.ColumnSeries.GetAxes (Datapoint firstDataPoint)

Es scheint kein Problem zu umgehen zu sein. Eine Option ist die Unterklasse einer LinearAxis, die CanPlot (value) überschreibt. Derzeit nicht NumericAxis.CanPlot für Wert == 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; 
Verwandte Themen