在C#MVVM中控制/监控外部设备的结构?

时间:2016-10-07 17:56:28

标签: c# mvvm

我正在编写一个小型应用程序来控制一些实验室设备(温度控制室,电源和电压表)。使用WPF,C#和MVVM。想知道将设备更新传递回ViewModel和View的模式是什么。我为每件设备建立了一个模型类,为设置电源电压,打开烤箱,读取仪表的测量等事项提供了属性和方法。我想知道关于通知电源模式(从电压限制模式切换到电流限制模式)和电流室温度等属性变化的最佳模式。我有两种不同的情况:

1)温度室:室内测量的温度自行缓慢移动,我需要每秒监测并显示当前读数。

2)电源:电源通常处于电压限制模式(保持电压恒定,让电流根据需要变化),但如果电流达到上限,则每隔几小时就会将模式切换到电流限制模式(不允许电流超过1amp并让电压根据需要开始下降)。这完全由电源控制,但是当它发生时我需要知道这种模式切换。

我可以看到ethier在模型中设置一个线程来轮询设备并在温度变化或模式改变时引发事件。还可以看到保持模型简单并将轮询放入ViewModel。通信开销是微不足道的,所以想知道是否有针对这种情况的建议。

谢谢你, 布赖恩

1 个答案:

答案 0 :(得分:0)

我会考虑通过实现接口的服务类公开硬件数据。服务类可以根据需要轮询硬件并引发事件。

该接口允许您创建一个模拟实现,以便对应用程序进行单元测试,而无需连接到物理硬件。

应用程序的视图模型应该在其构造函数中获取服务类的实例,挂钩任何事件,并在准备关闭时取消挂钩。

我不会将轮询直接放在模型或视图模型中,因为它处理特定的硬件实现。如果你可以尽可能地将它抽象出去,那么测试就容易得多。