我最近遇到了一个叫做 LiveChart 的工具,决定试用一下。
不幸的是,我在弄清楚如何实时更新图表值时遇到了一些问题。我很确定有一种干净正确的方法可以做到这一点,但我找不到它。
我希望能够通过 private void
或按钮更新值。
在我的代码中,我使用 ToolStripMenu 对其进行了测试。
[代码]:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LiveCharts;
using LiveCharts.WinForms;
using LiveCharts.Wpf;
using PokeShowdown_AccStats_T.Properties;
using LiveCharts.Defaults;
namespace PokeShowdown_AccStats_T
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//int val1 = int.Parse(Settings.Default.Value1);
var value1 = new ObservableValue(3);
var value2 = new ObservableValue(7);
var value3 = new ObservableValue(10);
var value4 = new ObservableValue(2);
//value1.Value = 5;
cartesianChart1.Series.Add(new LineSeries
{
Values = new ChartValues<ObservableValue> { value1, value2, value3, value4 },
StrokeThickness = 4,
StrokeDashArray = new System.Windows.Media.DoubleCollection(20),
Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(107, 185, 69)),
Fill = System.Windows.Media.Brushes.Transparent,
LineSmoothness = 0,
PointGeometry = null
});
cartesianChart1.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(34, 46, 49));
cartesianChart1.AxisX.Add(new Axis
{
IsMerged = true,
Separator = new Separator
{
StrokeThickness = 1,
StrokeDashArray = new System.Windows.Media.DoubleCollection(2),
Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(64, 79, 86))
}
});
cartesianChart1.AxisY.Add(new Axis
{
IsMerged = true,
Separator = new Separator
{
StrokeThickness = 1.5,
StrokeDashArray = new System.Windows.Media.DoubleCollection(4),
Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(64, 79, 86))
}
});
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void changeValue1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Settings.Default.Value1 = "10";
Settings.Default.Save();
this.Text = Settings.Default.Value1;
}
private void changeValue1To3ToolStripMenuItem_Click(object sender, EventArgs e)
{
Settings.Default.Value1 = "3";
Settings.Default.Save();
this.Text = Settings.Default.Value1;
}
}
}
最佳答案
Live-Charts 尽量保持简单。逻辑是使用具有您需要绘制的类型的通用集合,然后就像添加/删除或更新此集合中的任何元素一样简单,然后您的图表将被更新。
要回答您的问题,您通常需要:
public partial class Form1 : Form
{
private ObservableValue value1;
public Form1()
{
InitializeComponent();
//int val1 = int.Parse(Settings.Default.Value1);
value1 = new ObservableValue(3);
//...
cartesianChart1.Series.Add(new LineSeries
{
Values = new ChartValues<ObservableValue> { value1, ... },
});
}
private void changeValue1ToolStripMenuItem_Click(object sender, EventArgs e)
{
value1.Value = 10;
Settings.Default.Value1 = "10";
Settings.Default.Save();
this.Text = Settings.Default.Value1;
}
}
然后库将处理动画和更新
关于c# - 如何正确更新我的图表值? (实时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40415298/