我正在使用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;
}
}
}
}