7

「現在の」ターゲットが変更されたときに、Messenger/EventAggregator を使用してパラメーターを ViewModel に渡すことを提案している人がいますが、私の場合はうまくいきません。

次のような ViewModel クラスがあるとします。

class CustomerViewModel
{
    CustomerViewModel(int customerId) {}
}

と:

  1. アプリケーションシェルに同じタイプのビューを同時に持っています。
  2. ビューごとに、固有の CustomerViewModel インスタンスがあります。各 CustomerViewModel インスタンスは異なる customerId を持つことができます。(これは Visual Studio IDE に似ており、複数のドキュメントを同時に開いています)

View クラスに「this.DataContext = new CustomerViewModel(id)」のようなコードを書きたくありません。そのような場合を処理するMVVMの方法は何ですか?

ありがとう。

4

1 に答える 1

1

このケースを処理するにはいくつかの方法があります。最初に、ビュー ファーストまたはビュー モデル ファーストのどちらのアプローチを使用しているかを決定します。

EventAggregator の使用は有効なオプションです。

もう 1 つのオプションは、ViewModel にインターフェイスを実装させてから、 MEFや UnityなどのIoC/DIを使用して ViewModel のインスタンスを取得することです。このメソッドを使用すると、ViewModel が実装する必要があることがわかっている関数を定義できます。View が CustomerViewModel クラスを知る必要はなく、インターフェイスだけが必要です。Initalize(int Id)

ある種のDIを使用している場合は、いつでもそのパラメーターを ViewModel に挿入できることに注意してください。Unity の IIRC は、MEF よりも少し簡単に実行できます (値を登録してから、その型に依存する ViewModel を作成するだけです)。

于 2012-10-28T08:10:09.697 に答える