私はMVVMが初めてで、ここで少し頭を悩ませています。英語は私の優先言語ではないので、ご容赦ください。
PLC用のHMIを作ろうとしています。2 つの異なる PLC に接続し、PLC の異なるデータブロックからデータを提示することになっています。簡単にするために、1 つの PLC のみに接続し、1 つのデータブロックのみからデータを取得する場合について説明します。データブロックにはデータの繰り返し構造体があります。私のソリューションでは、各構造体をオブジェクトにします。
PLC との通信にはLibnodaveを使用します。MVVM-thingies 用の MVVM Light。
モデル。
PLC 構造体の「レシピ」が含まれています。また、get-set-メソッドも含まれています。
int _startByte;
string _name;
int _value1;
bool value2;
ビューモデル。
ViewModelBase から継承し、モデル オブジェクトをメンバーとして持ちます。set で propertychanged を発生させる public get-set-methods。例:
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 の 2 つの配列を持つクラス) からモデル名と startbyte を取得します。RelayCommands を使用して、ViewModels をコレクションに追加することをテストしました。
意見。
今のところ動作しますが、後で同様に動作することを願っています
私のプログラムは次のようになります。
View
CollectionViewModel
ViewModel ModelData
Model
(ViewModel と ModelData はお互いを知りません)
ということで、データ収集へ。私の計画は、ViewModel に PLC オブジェクトへの参照を持たせ (これがLibnodave の出番です)、PLC オブジェクト メソッドを使用してデータを収集することでした。PLC オブジェクトは PLC への接続を表し、データを読み書きするためのメソッドを含みます。ViewModel では、PLC オブジェクト メソッドを使用してデータを収集 (およびデータの書き込み) します。
これは多くの PLC 参照を意味しますが、ロックによってクラッシュが防止されることが期待されます。私の問題は、ViewModel に PLC オブジェクトへの参照を与える方法がわからないことです。PLC オブジェクトは他の ViewModel でも使用され、PLC ごとに 1 つずつ、2 つの異なる PLS オブジェクトが存在します。
これは有効なアプローチですか、それともまったく別のものを検討する必要がありますか?