USB를 통해 연결된 임베디드 장치에서 DataPackets을 수집하는 Singleton 클래스 인 DataPacketAggregator가 있습니다. 패킷은 항상 버스트로 수신됩니다. 모든 DataPacket은 센서 식별과 소스 주소 (ZigBee 통신에서 제공)를 포함합니다. 있는 TableView에 제공 한 모든 값이 ObservableCollection에 내부에 이미 있기 때문에 Centralized Data Aggregator 및 WPF Toolkit 라인 시리즈를 사용하기위한 최상의 구현
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;
}
...
}
이 그래서 UI가 어떤에 대한 통지 :
public class DataPacket
{
public String SourceAddress {get; set;}
public Byte SensorID {get; set;}
public DateTime Timestamp {get; set;}
public Int16 Value {get; set;}
}
게이터 클래스는이 기본 구현을 제공합니다 : 기본적으로 그것은 DataPacket 클래스가 제공하는 것입니다 DataPacketAggregator에서 계속 변경됩니다. 이미 수집 된 데이터의 표보기를 제공하지만 모든 센서가 표시됩니다. 지금은 DataPacket을 Key SourceAdress가있는 Dictionary에 저장하고 DataPacket에 고유 한 데이터가 들어있는 DataPacket-Value 값을 받았습니다.
이제 사용자 인터페이스의 ComboBox에서 선택된 선택된 SourceAddress와 연결된 각 센서 ID에 대해 한 줄의 시리즈 차트를 만들려고합니다. LineSeries는 독립 축에 타임 스탬프를위한 DataPacket 데이터를 표시하고 종속 축에 값을 표시합니다. 이 ComboBox의 ItemsSource 속성은 데이터를 제공하는 Dictionary의 사용 가능한 키에 바인딩됩니다. 요점은 모든 소스가 동일한 양의 센서를 연결해야하는 것은 아니며 센서 양에 따라 LineSeries Objects를 동적으로 다시 만들고 싶다는 것입니다.
- 둥지 특정 센서에 속하는 값에 빠르게 액세스하는 것이 기존의 사전 안에 다른 사전 : 는 I 가능할 수있는 여러 구현에 대해 생각했다. 문제는 전체 데이터 콜렉션에 액세스하려는 경우 데이터를 "병합"해야한다는 것입니다.
- LINQ-Query와 함께 그룹화를 적용하여 특정 센서와 관련된 모든 데이터를 가져옵니다. 나는이 해결책을 선호 하겠지만 여기에는 두 가지 점이있다. 첫 번째 : 주요 성능 손실없이 UI를 업데이트하는 방법 (모든 쿼리를 반복해서 실행) UI에 알리는 방법? 관련 검색어에 변경 사항이있는 경우 일반적으로 UI에 알리고 싶기 때문에 일반적으로이를 감지 할 수는 없습니다. 그래서 모든 DataPacket (심지어 UI 드로잉과 관련 없음)이 추가되는 즉시 UI 전체를 업데이트하고 다시 그려야 할 것입니다.
- DataAggreagtor 내에서 현재 관련 SourceAddress로 설정할 수있는 추가 속성 추가하기 (또한 바인딩을 통해). SourceAddress 만있는 ObservableCollection을 반환 할 수 있으며 전체 데이터의 하위 집합에서만 쿼리 할 수 있습니다. 또한 표시 할 SourceAddress를 알 수 있고 다시 쿼리하지 않고 컬렉션을 업데이트 할 수 있기 때문에이 관찰 가능한 컬렉션 만 업데이트 할 수 있습니다. 이것의 주요 단점은 항상 단일 소스에서 데이터를 표시하는 것으로 제한된다는 것입니다.
나는이 문제점에 대한 최선의 해결책이 무엇인지에 대해 확실치 않으며 WPF Toolkit Charting Component에 대해서는 익숙하지 않습니다.