Динамическое отображение данных LineGraph не обновляется
Я пытаюсь использовать Dynamic Data Display для моего старшего дизайн-проекта, но у меня возникают трудности.
Я могу создать график просто отлично, но я не могу обновить строку вообще, если не увеличиваю и уменьшаю масштаб.
В большинстве примеров все, что им нужно было сделать, это создать график, затем, когда они манипулируют данными, график обновляется сам.
Итак, вот основные функции, которые я использую в отношении графиков:
private List<WindDAQ.WindDataPoint> Chart1Data;
private EnumerableDataSource<WindDAQ.WindDataPoint> Chart1DataSource;
private void InitializeCharts()
{
Chart1Data = new List<WindDAQ.WindDataPoint>();
Chart1DataSource = new EnumerableDataSource<WindDAQ.WindDataPoint>(Chart1Data);
Chart1DataSource.SetXMapping(x => Chart1XAxis.ConvertToDouble(x.Time));
Chart1DataSource.SetYMapping(y => Chart1XAxis.ConvertToDouble(y.Lift));
Chart1.AddLineGraph(Chart1DataSource, Colors.Blue, 2, "Lift");
Chart1.Viewport.AutoFitToView = true;
}
private void UpdateChart()
{
for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
{
Chart1Data.Add(itsDAQ.getValue());
if(Chart1Data.Count >= 300)
{ Chart1Data.RemoveAt(0); }
}
}
InitializeCharts () вызывается один раз при создании окна.
UpdateChart () вызывается для события таймера.
WindDAQ.WindDataPoint содержит данные Lift, Drag, Velocity и Time. Лифт и Время показаны выбранными.
1 ответ
Вы должны использовать метод AppendAsync вашей observableCollection. Вы обновляете только список, использованный для создания наблюдаемого, а не источник вашего графика.
private void UpdateChart()
{
for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
{
Chart1DataSource.AppendAsync(itsDAQ.getValue());
if (Chart1DataSource.Collection.Count >= 300) // this part should work in a thread-safe
{
Chart1DataSource.Collection.RemoveAt(0); // context and with some precaution
}
}
}