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