2017-02-10 4 views
3

独自のビューモデル「VM_R」を持つ再利用可能なWPFコントロール「R」を開発しています。 私は、コントロールRを使用するWPFメインウィンドウ "Main"を持っており、それ自身のビューモデルと "VM_Main"を持っています。モデルを双方向で表示する

私の質問: 私はVM_MainとVM_Rは、次のように伝えたい:

VM_Mainは何かを評価し、バックVM_Mainに結果を送信するためにVM_Rにリクエストを送信します。私は、次のオプションを検討している

:VM_Mainで

  1. インスタンス化VM_R。これによりカップリング が作成されます。
  2. MVVM Light Messengerを使用できます。しかし、私は2つの登録呼び出しと2つの送信呼び出しを持っているとは思わない。

はありがとう

+0

いいえ、それは何ですか** DepenencyProperty **( – MickyD

+0

)あなたは現在、他のViewModelで現在のViewModelの何かを評価したいのですか? –

+0

VM_MAINからControl Rのコンボボックスとチェックボックスの値を読みたい。 – John

答えて

-1

私はオプション1で行くことをお勧めしますが、いくつかのより良い方法です。 DIを使用してR_VMをR_Mainに注入することができます。ここでは例

public interface IR_VM 
{ 
    int MyMethod(int param); 
} 

public class R_VM : IR_VM 
{ 
    public int MyMethod(int param) 
    { 
     // implemention 
     return 0; 
    } 
} 

public class VM_Main 
{ 
    public VM_Main(IR_VM rvm) 
    { 
     RVM = rvm; 
    } 
    public IR_VM RVM { get; set; } 
} 
+1

ViewModels用のインターフェイスを作成してもコードの品質は改善されないと私は考えています。これは、「直接参照を持たない」という回避策のようなものです。ビューに別のビューが含まれている場合、ViewModelは直接参照を持つことができます。 – jannagy02

+0

あなたはカップリングを削除していないので、VM_Mainをインスタンス化するのがより複雑になりました。ああ、間接指定のレイヤーを追加してデバッグするのは難しいです。 –

+0

カップリングは全くありません。ここで私は直接参照していないVMを注入しています。あなたがこのことを見つけたら、私はまずDIについて読むことを提案します。おそらく私のアプローチを理解するのに役立ちます。 –

0

私は、再利用可能なWPFコントロール、独自のビューモデル「VM_Rを」持っている「R」を開発しています。

これはおそらく間違っています。一般的に言えば、特定のコントロールのビューモデルが必要だと思うのであれば、実際に行っていることは間違った場所にコードを置くことです。

コントロールのコードビハインドにそのことを固執し、実際のモデルまたはビューモデルがバインドできる依存プロパティを公開します。

VM_MainでVM_Rをインスタンス化します。これは、カップリングの懸念を作成します。

これは、コードを間違った場所に置いている疑いがあることを確認しています。

MVVM Light Messengerを使用できます。

いいえ使用しないでください。 MVVM Light Messengerは、大量のメモリリークが発生するのを待っているだけです。