|
|
|
@ -0,0 +1,67 @@ |
|
|
|
|
using CommunityToolkit.Mvvm.ComponentModel; |
|
|
|
|
using CommunityToolkit.Mvvm.Input; |
|
|
|
|
using OxyPlot.Series; |
|
|
|
|
using OxyPlot; |
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.Linq; |
|
|
|
|
using System.Text; |
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
using System.Timers; |
|
|
|
|
using System.Windows; |
|
|
|
|
|
|
|
|
|
namespace GettingStarted.ViewModels |
|
|
|
|
{ |
|
|
|
|
internal partial class MainViewModel3 : ObservableObject |
|
|
|
|
{ |
|
|
|
|
[ObservableProperty] |
|
|
|
|
private PlotModel _myModel; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[ObservableProperty] |
|
|
|
|
private LineSeries _lineSeries; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public MainViewModel3() |
|
|
|
|
{ |
|
|
|
|
MyModel = new PlotModel() { Title = "Getting Started with RT Plot" }; |
|
|
|
|
LineSeries = new LineSeries() { Title = "Dynamic Data" }; |
|
|
|
|
|
|
|
|
|
MyModel.Series.Add(LineSeries); |
|
|
|
|
|
|
|
|
|
_timer = new System.Timers.Timer(); |
|
|
|
|
_timer.Interval = 50; |
|
|
|
|
_timer.Elapsed -= _timer_Elapsed; |
|
|
|
|
_timer.Elapsed += _timer_Elapsed; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private int _lastX = 0; |
|
|
|
|
private void _timer_Elapsed(object? sender, ElapsedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
Application.Current.Dispatcher.Invoke(() => |
|
|
|
|
{ |
|
|
|
|
LineSeries.Points.Add(new DataPoint(_lastX, Math.Sin(_lastX * 0.1))); |
|
|
|
|
MyModel.InvalidatePlot(true); |
|
|
|
|
_lastX++; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private bool _isTimerStarted = false; |
|
|
|
|
private System.Timers.Timer _timer; |
|
|
|
|
|
|
|
|
|
[RelayCommand] |
|
|
|
|
private void FlipTimer() |
|
|
|
|
{ |
|
|
|
|
if (!_isTimerStarted) |
|
|
|
|
{ |
|
|
|
|
_timer.Start(); |
|
|
|
|
_isTimerStarted = true; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
_timer.Stop(); |
|
|
|
|
_isTimerStarted = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |