0

私は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 オブジェクトが存在します。

これは有効なアプローチですか、それともまったく別のものを検討する必要がありますか?

4

2 に答える 2