2016-07-31 3 views
0

Ich verwende WPF Toolkit, um Daten im AreaSeries-Diagramm anzuzeigen, es wird jedoch nicht angezeigt. Ich weiß nicht, was ich falsch mache. Bitte helfen/vorschlagen.Wie werden Daten im WPF Toolkit AreaSeries-Diagramm angezeigt?

Unten ist der XAML-Code:

<Window xmlns:chart="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 

x:Class="GRAPHPrototype.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:GRAPHPrototype" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid>  
    <chart:Chart Name="chart1">    
    </chart:Chart> 
</Grid> 

Und der C# -Code:

public partial class MainWindow : Window 
{ 
    static List<Ready4LOS> Ready4LOS = new List<Data.Ready4LOS>(); 
    public MainWindow() 
    { 
     InitializeComponent(); 

     InitChart(); 
     SampleData(); 
     chart1.DataContext = Ready4LOS; 
    } 

    private void SampleData() 
    { 

     Ready4LOS.Add(new Data.Ready4LOS() { Case = 5, Time = DateTime.Now.AddMinutes(-75) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 15, Time = DateTime.Now.AddMinutes(-65) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 5, Time = DateTime.Now.AddMinutes(-55) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 8, Time = DateTime.Now.AddMinutes(-45) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 22, Time = DateTime.Now.AddMinutes(-35) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 35, Time = DateTime.Now.AddMinutes(-25) }); 
     Ready4LOS.Add(new Data.Ready4LOS() { Case = 4, Time = DateTime.Now.AddMinutes(-05) }); 
    } 

    private void InitChart() 
    { 
     System.Windows.Data.Binding indi = new System.Windows.Data.Binding("Case"); 
     System.Windows.Data.Binding dep = new System.Windows.Data.Binding("Time"); 
     AreaSeries ares = new AreaSeries(); 
     ares.IndependentValueBinding = indi; 
     ares.DependentValueBinding = dep; 

     DateTimeAxis dta = new DateTimeAxis(); 
     dta.Interval = 10; 
     dta.IntervalType = DateTimeIntervalType.Minutes; 
     dta.Title = "Time"; 
     dta.Orientation = AxisOrientation.X; 
     dta.Minimum = DateTime.Now.AddMinutes(-80); 
     dta.Maximum = DateTime.Now; 

     LinearAxis yaxis = new LinearAxis(); 
     yaxis.Minimum = 0; 
     yaxis.Interval = 2; 
     yaxis.Title = "Case"; 
     yaxis.Orientation = AxisOrientation.Y; 
     chart1.Axes.Add(yaxis); 
     chart1.Axes.Add(dta); 
     chart1.Series.Add(ares); 
    } 
} 

ich die Eingabedaten in diesem Format

class Ready4LOS : INotifyPropertyChanged 
{ 
    int _case; 
    DateTime _time; 

    public int Case 
    { 
     get 
     { 
      return _case; 
     } 
     set 
     { 
      _case = value; 
      NotifyPropertyChanged("Case"); 
     } 
    } 

    public DateTime Time 
    { 
     get 
     { 
      return _time; 
     } 
     set 
     { 
      _time = value; 
      NotifyPropertyChanged("Time"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
+0

freuen, wenn jemand die Frage formatiert, wenn nicht getan richtig von mir :( – rvsingh42

+0

danke Funk für die Neuformatierung. – rvsingh42

Antwort

1

Es gibt haben 2 Probleme mit Ihrem Code:

  1. Sie haben nicht binden Ihre List den Areaseries ItemSource
  2. Sie die indi geschaltet und dep Binding

Versuchen

private void InitChart() 
{ 
    System.Windows.Data.Binding indi = new System.Windows.Data.Binding("Case"); 
    System.Windows.Data.Binding dep = new System.Windows.Data.Binding("Time"); 
    AreaSeries ares = new AreaSeries(); 
    ares.ItemsSource = Ready4LOS; 
    ares.IndependentValueBinding = dep; 
    ares.DependentValueBinding = indi; 

    DateTimeAxis dta = new DateTimeAxis(); 
    dta.Interval = 10; 
    dta.IntervalType = DateTimeIntervalType.Minutes; 
    dta.Title = "Time"; 
    dta.Orientation = AxisOrientation.X; 
    dta.Minimum = DateTime.Now.AddMinutes(-80); 
    dta.Maximum = DateTime.Now; 

    LinearAxis yaxis = new LinearAxis(); 
    yaxis.Minimum = 0; 
    yaxis.Interval = 2; 
    yaxis.Title = "Case"; 
    yaxis.Orientation = AxisOrientation.Y; 

    chart1.Axes.Add(dta); 
    chart1.Axes.Add(yaxis); 
    chart1.Series.Add(ares); 
} 
+0

Vielen Dank .. Ich werde versuchen und Sie wissen lassen, ob das funktioniert. – rvsingh42

+0

hat es funktioniert :), aber ich verstehe nicht den 2. Punkt erwähnt. – rvsingh42

+0

@ rvsingh42 Gern geschehen. In Ihrem ursprünglichen Code hatten Sie 'Arees.IndependentValueBinding = indi;' 'Arees.DependentValueBinding = dep;' was einen Fehler ergab. Es wurde in 'ares.IndependentValueBinding = dep;' 'ares.DependentValueBinding = indi;' geändert. – Funk

Verwandte Themen