我是 MVVM 的新手,在这里我有点不知所措。英语不是我的首选语言,所以请多多包涵。
我正在尝试为 PLC 制作 HMI。我应该连接到两个不同的 PLC,并显示来自 PLC 中不同数据块的数据。为简单起见,让我们谈谈仅连接到一个 PLC,并仅从一个数据块获取数据。数据块有一个重复的数据结构,在我的解决方案中,我将每个结构都变成了一个对象。
对于与 PLC 的通信,我使用Libnodave。适用于 MVVM 事物的 MVVM Light。
模型。
包含 PLC 结构的“配方”。它还包括get-set-methods。
int _startByte;
string _name;
int _value1;
bool value2;
视图模型。
从 ViewModelBase 继承,并有一个模型对象作为成员。公共的 get-set-methods,它会在 set 上引发 propertychanged。例子:
Public ViewModel(string name, int startByte)
{
_model = new Model{Name = name, StartByte = startByte};
}
public int Value
{
get{return _model.Value;}
set
{
if(_model.Value!=value)
{
_model.Value=value;
RaisePropertyChanged("Value");
}
}
}
集合视图模型。
ViewModel 的 ObservableCollection。从 ModelData.cs(具有两个数组 name 和 startbyte 的类)获取模型名称和 startbyte。使用 RelayCommands 我已经测试了将 ViewModels 添加到集合中。
看法。
目前可以使用,希望以后也可以使用
我的程序看起来有点像这样:
View
CollectionViewModel
ViewModel ModelData
Model
(ViewModel 和 ModelData 互不认识)
所以,继续收集数据。我的计划是让 ViewModel 引用一个 PLC 对象(这是Libnodave出现的地方),并使用 PLC 对象方法收集数据。PLC 对象表示与 PLC 的连接,并包含用于写入和读取数据的方法。在 ViewModel 中,我将使用 PLC 对象方法来收集数据(和写入数据)。
这意味着很多 PLC 引用,但锁定有望防止崩溃。我的问题是我不知道如何为 ViewModel 提供对 PLC 对象的引用。PLC 对象也将被其他 ViewModel 使用,并且将有两个不同的 PLS 对象,每个 PLC 一个。
这是一种有效的方法,还是我应该研究完全不同的东西?