2017-02-03 7 views
0

В моем проекте я хочу нарисовать точку на графике реального времени всякий раз, когда график равен определенному значению. Я не знаю, как это сделать. Это код, который я использую, чтобы показать в реальном времени график:нарисовать точку на графике с использованием oxyplot на приложении wpf

public class MainViewModel 
{ 
    public PlotModel DataPlot { get; set; }   
    public DispatcherTimer graphTimer; 
    private double _xValue = 10; 

    public MainViewModel() 
    { 
     DataPlot = new PlotModel(); 
     DataPlot.Series.Add(new LineSeries()); 

     graphTimer = new DispatcherTimer(); 
     graphTimer.Interval = TimeSpan.FromMilliseconds(MainWindow.timerRefreshMs); 
     graphTimer.Tick += dispatcherTimer_Tick; 
     graphTimer.Start();  

    }   

    public void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     ScatterSeries series = new ScatterSeries(); 
     Dispatcher.CurrentDispatcher.Invoke(() => 
     { 
      (DataPlot.Series[0] as LineSeries).Points.Add(new DataPoint(_xValue, MainWindow.z));  
      //DataPlot.InvalidatePlot(true); 
      //_xValue++; 
      if(MainWindow.z == 900) 
      { 
       //ADD A POINT 

      } 
      DataPlot.InvalidatePlot(true); 

      _xValue++; 

      if ((DataPlot.Series[0] as LineSeries).Points.Count > 80) //show only 10 last points 
       (DataPlot.Series[0] as LineSeries).Points.RemoveAt(0); //remove first point 
     }); 
    } 


} 

ответ

0

Вы должны использовать следующий шаблон для добавления или удаления данных:

int _xValue = 0; 
    public void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     Dispatcher.CurrentDispatcher.Invoke(() => 
     { 
      LineSeries ser = plotModel.Series[0] as LineSeries; 
      if (ser != null) 
      { 
       // check your conditions and caclulate the Y value of the point 
       double yValue = 1; 
       ser.Points.Add(new DataPoint(_xValue, yValue)); 
       _xValue++; 
      } 
      if (ser.Points.Count > 80) //show only 10 last points 
       ser.Points.RemoveAt(0); //remove first point 
      plotModel.InvalidatePlot(true); 
     }); 
    } 

Позвольте мне знать, если что-то не работает.

Смежные вопросы