Не зная, как устроена вся ваша архетектура, я могу только предполагать. Скорее всего, я бы сделал в вашей ситуации следующее:
1) попросите ваше главное окно подписаться на SerialDataReceivedEventArgs
, чтобы событие вызывалось в коде позади главного окна. Этот вопрос должен стать хорошей отправной точкой, чтобы связать это вместе. Это позволит вам обновить данные из вашего главного окна.
2) Если вы используете модель представления и привязку данных; тогда я бы создал команду или метод, чтобы добавить новые данные датчика в ваши коллекции. В вашей модели представления я бы создал ObservableCollection
для каждого датчика, а затем использовал привязку, чтобы прикрепить их к главному окну.
//MainWindow XAML
<Window.DataContext>
<vm:MainWindowViewModel/>
</Window.DataContext>
<YourControl1 ItemSource={Binding Source=SensorData1}/>
<YourControl2 ItemSource={Binding Source=SensorData2}/>
<YourControl3 ItemSource={Binding Source=SensorData3}/>
3) В своем коде MainWindow (или в XAML, если вы хотите создавать новые события), вы можете вызвать команду или метод ViewModel для обновления данных. Используя имена из ссылки выше:
// inside MainWindow.xaml.cs
private void DisplaySerDataHandler(object sender, SerialDataReceivedEventArgs e)
{
var newSensorData1;
//...This is where you set all the new sensor data you received to the variables.
var dContext = DataContext as MainWindowViewModel;
dContext?.SetNewSensorData(newSensorData1, newSensorData2, newSensorData3);
}
4) Внутри MainWindowViewModel.cs вы можете иметь бизнес-логику для изменения ObservableCollections, которая будет обновляться при добавлении и автоматически обновлять элементы пользовательского интерфейса.
//you need an ObservableCollection for each list
public ObservableCollection<sensorType> SensorData1 {get;set;}
//then create the command or method to add the data to their respective Collection
public void SetNewSensorData(sensorType sData1, sensorType sData2, sensorType sData3){
//...then add the new data (with extra logic as needed)
SensorData1.add(sData1);
SensorData2.add(sData2);
SensorData3.add(sData3);
}
Есть много других элементов, которые можно / нужно сделать. Это был пример того, как можно обновить элементы управления главного окна входящими сериализованными данными. Это зависит от вас, как вы хотите, чтобы все было разработано. Ваш MainWindowViewModel
будет реализовывать INotifyPropertyChanged
. Я предпочитаю использовать команды, так как я могу затем попытаться удалить код из кода и связать все в XAML, и тогда вся моя логика может содержаться во ViewModel. Это не правильный или неправильный способ сделать это, просто мои предпочтения. Я предпочитаю иметь код, который используется только для конкретного изменения самих элементов Control, а вся остальная бизнес-логика находится во ViewModel.