Лучший способ отслеживать данные? - PullRequest
0 голосов
/ 23 октября 2018

Я использую 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    
});

Могу ли я как-то сделать ссылку между моим testlist и Results, чтобы при изменении значения в 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;
            }

        }

    }
}
...