跟踪数据的更好方法?

时间:2018-10-23 12:26:31

标签: c# livecharts

我正在使用LiveCharts(WinForms),并且开始了解其工作原理。

但是我仍然需要更多东西才能按照我预期的方式使用它。

我知道,通过添加/删除或更改其值之一来更新Results ChartValues<ObservablePoint>时,Chart会自动更新。

我现在正在寻找的是跟踪数据的更好方法。

示例:如果我向value添加新的Results并将其存储在Results[435]上,则index number 435是我知道特定数据存储位置的唯一方法。如果Results[146]被删除了,那么现在我的数据在Results[434]了怎么办 正如我所看到的,我不能只使用目录(这样可以解决我的问题)。

  • 还有其他我看不到可以使用的东西吗?

另一个想法: 我将原始数据保存在testlist中,然后将其“翻译”为:

Results.Add(new ObservablePoint
{
    X = item,
    Y = item * 10    
});

我可以以某种方式在我的testlistResults之间进行引用,以便在testlist中的值被更改时,Results也被更改吗?

如果您不清楚我的问题,请告诉我,我将尽力更好地解释自己。

我在这里附加了我的代码:

using System;
using System.Windows.Forms;
using System.Windows.Media;
using LiveCharts;
using LiveCharts.Wpf;
using LiveCharts.Configurations;
using LiveCharts.Defaults;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace LiveCharts
{
    public partial class Form1 : Form
    {

        public ChartValues<ObservablePoint> Results;


        public Form1()
        {
            InitializeComponent();
            Results = new ChartValues<ObservablePoint>();
            List<int> testlist = new List<int>();

            //Background
            cartesianChart1.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 46, 49));


            //Configure the chart to plot ObservablePoint
            var mapper = Mappers.Xy<ObservablePoint>()
                .X(point => point.X)
                .Y(point => Math.Log10(point.Y));

            //Setting the Y-axis to Logarithmic
            cartesianChart1.AxisY.Add(new LogarithmicAxis
            {
                LabelFormatter = value => (Math.Pow(10, value)).ToString("N0"),
                Base = 10,
                MinValue = 0,
                Separator = new Separator
                {
                    Stroke = Brushes.LightGray,
                    StrokeThickness = 0.3,
                },

            });


            //Putting data in
            for (int i = 1; i <= 1000; i++)
            {
                testlist.Add(i);
            }


            foreach (int item in testlist)
            {

                Results.Add(new ObservablePoint
                {
                    X = item,
                    Y = item * 10

                });

            }


            //Posting to the chart
            cartesianChart1.Series = new SeriesCollection
            {
                new LineSeries
                {
                    Configuration = mapper,
                    Values = Results,
                    Fill = System.Windows.Media.Brushes.Transparent,
                    PointGeometry = null,
                    ToolTip = null,
                    DataLabels = false,                    

                }
            };


        }

        private void button1_Click(object sender, EventArgs e)
        {

            for (int i = 0; i < Results.Count; i++)
            {
                Results[i].X = Results[i].X;
                Results[i].Y = Results[i].Y + 1000;
            }

        }

    }
}

0 个答案:

没有答案