使用集中式数据聚合器和WPF工具包系列的最佳实现
我有一个单例类DataPacketAggregator,它从通过USB连接的嵌入式设备收集数据包。数据包总是以突发方式接收。每个数据包包含传感器标识和源地址(来自ZigBee通信)。基本上,这就是DataPacket类提供的功能:使用集中式数据聚合器和WPF工具包系列的最佳实现,wpf,binding,charts,wpftoolkit,Wpf,Binding,Charts,Wpftoolkit,我有一个单例类DataPacketAggregator,它从通过USB连接的嵌入式设备收集数据包。数据包总是以突发方式接收。每个数据包包含传感器标识和源地址(来自ZigBee通信)。基本上,这就是DataPacket类提供的功能: public class DataPacket { public String SourceAddress {get; set;} public Byte SensorID {get; set;} public DateTime Timesta
public class DataPacket
{
public String SourceAddress {get; set;}
public Byte SensorID {get; set;}
public DateTime Timestamp {get; set;}
public Int16 Value {get; set;}
}
聚合器类提供以下基本实现:
public class DataPacketAggregator: INotifyPropertyChanged
{
Dictionary<String, ObservableCollection<DataPacket>> _dpkts; //Container
//Method for getting an observable collection containing only values belonging to
//SourceAddress
public ObservableCollection<DataPacket> GetDataBySource(String Source)
{
ObservableCollection<DataPacket> dpkts;
this._dpkts.TryGetValue(Source, out dpkts);
return dpkts;
}
...
}
公共类数据包聚合器:INotifyPropertyChanged
{
字典_dpkts;//容器
//用于获取仅包含属于的值的可观察集合的方法
//源地址
公共ObservableCollection GetDataBySource(字符串源)
{
可观测收集dpkts;
此.u dpkts.TryGetValue(源,输出dpkts);
返回dpkts;
}
...
}
因此,由于提供给TableView的所有值都已在ObservableCollection中,因此会将DataPacketAggregator中发生的任何更改通知UI。
我已经提供了一个收集数据的表格视图,但是每个传感器都会显示出来。目前,我正在将数据包存储在一个字典中,其中包含键SourceAddress和DataPacket对象的值,该值包含所接收数据包的特定数据
我现在要做的是为与从用户界面上的组合框中选择的选定SourceAddress关联的每个传感器ID创建一个单线系列图表。LineSeries应在独立轴上显示时间戳数据包数据,并在从属轴上显示值。此组合框的ItemsSource属性绑定到提供数据的字典中的可用键。关键是并非所有源都需要与之关联的相同数量的传感器,我希望根据传感器的数量动态重新创建LineSeries对象
我考虑了几种可能的实现:
目前,我真的不确定该问题的最佳解决方案是什么,我也不太熟悉WPF Toolkit图表组件。最后,我将其实现为一个集合,由绑定到ComboBox的另一个属性触发。当SourceAddress对应于当前显示的源地址时,将触发更新。它最终是这样工作的,但主要的限制当然是只有一个源可以查看