在Service和ViewModel之间通信数据

时间:2018-11-12 15:53:12

标签: wpf mvvm service serial-port

我正在使用WPF和MVVM体系结构。 我需要使用接收到的任何串行数据来更新我的视图和数据模型,这可以随时进行。

要实现这一点,我有

Class Report < ApplicationRecord 

  has_many :features, dependent: :destroy
  accepts_nested_attributes_for :features

  def features_attributes=(features_attributes)
    features_attributes.each do |feature_attributes|
     f = Feature.by_id_or_map_linkage(feature_attributes)
     if f
      f.update_attributes(feature_attributes)
     else
      f = Feature.create(feature_attributes)
     end
   self.features <<  f
  end
 end
end

每当我通过DataReceivedHandler()接收数据时,我都想通知viewModel有要显示的新数据并将其存储在我的模型中(这仅仅是接收到的字节以及与第一个值相关的颜色字节)。

将其传达给viewModel的最佳方法是什么?

我也尝试直接从SerialPortService类更新模型,但是出现了与线程关联性有关的错误。

谢谢!

1 个答案:

答案 0 :(得分:1)

向SerialPortService添加事件,以便ViewModel可以侦听数据添加的事件:

    static public event EventHandler<NewDataReceivedArgs> NewDataReceived;

    static public void OnNewDataReceived(byte[] data)
    {
        var handler = NewDataReceived;
        if (handler != null)
        {
            handler(null, new NewDataReceivedArgs(){Data = data});
        }
    }

    public class NewDataReceivedArgs : EventArgs
    {
        public byte[] Data { get; set; }
    }

然后在您的DataReceivedHandler中:

// update the viewModel with the data in rx_buffer here?!
OnNewDataReceived(rx_buffer);