我目前正在创建一个项目,它将从我的COM端口获取实时数据,然后显示它以便于解释。其中一部分是使用动态数据显示创建折线图,我希望它也能实现。
我目前有一个工作设置,它将来自集合的数据汇总在一起,并以可读的格式输出给绘图仪,而这对我的静态样本数据来说很好,我担心考虑到数据将会远远优化更新很多(有时每秒多次)。始终发送数据已更改的通知会使图表刷新,但始终提取所有数据并创建新图源似乎远非有效。我在我的视图模型中使用以下代码:
private CompositeDataSource _AccelXData;
public CompositeDataSource AccelXData
{
get
{
var xData = new EnumerableDataSource<int>(dataItems.Select(v => v.id));
xData.SetXMapping(x => x);
var yData = new EnumerableDataSource<double>(dataItems.Select(v => v.accelX));
yData.SetYMapping(y => y);
_AccelXData = xData.Join(yData);
return _AccelXData;
}
}
我有多个运行的,每个代表一个图形(例如x,y和z轴上的加速度)。它们必须遵循示例图表:
<d3:ChartPlotter Name="plotter" DockPanel.Dock="Top" Margin="5">
<d3:LineGraph DataSource="{Binding AccelXData}" />
<d3:LineGraph DataSource="{Binding AccelYData}" />
<d3:LineGraph DataSource="{Binding AccelZData}" />
</d3:ChartPlotter>
我想知道两件事:是否有可能编写一个函数来处理所有数据输出,我不必一遍又一遍地复制相同的代码?更重要的是,一旦我的Collection更新而不是一遍又一遍地重新收集所有数据,那么简单地将值添加到我的折线图中的最佳方法是什么?
答案 0 :(得分:0)
“只要我的收藏集更新而不是一遍又一遍地重新收集所有数据,那么简单地将值添加到我的折线图中的最佳方法是什么?”
我建议您使用“ObservableCollection”来存储数据源。并朝这个方向看:
https://www.google.com/?gws_rd=ssl#q=observablecollection+notify+property+changed