using RealTimeGraphEx.DataSeries; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace RealTimeGraphEx.Controllers { public class GraphController : GraphControllerBase { #region Cross Thread Fields internal DataYSeries dataSeries; #endregion public GraphController() { DataSeries = new DataYSeries(); } public DataYSeries DataSeries { get { return (DataYSeries)GetValue(DataSeriesProperty); } set { SetValue(DataSeriesProperty, value); } } public static readonly DependencyProperty DataSeriesProperty = DependencyProperty.Register("Controller", typeof(DataYSeries), typeof(GraphController), new PropertyMetadata(null, new PropertyChangedCallback(SetCrossThreadFields))); private static void SetCrossThreadFields(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as GraphController).OnSetCrossModelFields(); } protected virtual void OnSetCrossModelFields() { this.Dispatcher.Invoke(() => { dataSeries = DataSeries; }, System.Windows.Threading.DispatcherPriority.Send); } public override void Clear() { if (clearMethod != null) { clearMethod(); } dataSeries.ClearPoints(); } internal override void ClearPoints() { dataSeries.ClearPoints(); } public virtual void PushData(List values) { if (startThreadMethod != null) { startThreadMethod(); } dataSeries.PushData(values); } public virtual void PushData(double[] values) { if (startThreadMethod != null) { startThreadMethod(); } dataSeries.PushData(values); } public virtual void PushData(double value) { if (startThreadMethod != null) { startThreadMethod(); } dataSeries.PushData(value); } } }