2011-11-15 8 views
1

私のアプリケーションにMVVMパターンを使用しています。このモデルは実際には一連のテストを並行して実行し、その結果を含めてテストのステータスをタブで保持します。ステータスと結果をビューに表示する必要があります。私はビューモデルのデザインに立ち往生しています。ビューモデルとモデルを通信するにはどうすればいいですか?

問題は、ビューに表示されるすべての必要なデータが格納されるモデルにクラスとサブクラスの階層がたくさんあることです。これらのデータは動的です。 ビューモデルの設計方法がわかりません。

私はこれらの行に沿って考えていました - ビューに表示されるものを反映するビューモデルで新しいデータ構造を作成し、すべてのビューモデルを取得して必要なデータを取得します。この場合、データが変更されるたびにモデルがビューモデルをどのように更新するのか混乱します。または、データが異なるクラスとサブクラスに格納されている場合、モデルとビューモデルはどのように通信しますか。

+0

モデルは状態を変更したときにイベントを発生させることができますか?理想的にはモデルはダムであり、何か他のものによって操作される。彼らは自分自身を変えてはならない。 –

+0

実際には、一度に複数のテストを実行することができます。つまり、本質的に複数のモデルが一度に表示され、ユーザーは表示するデータを選択できます。モデルが変わるたびにモデルの火を作ることができます。モデルが愚かであると思われる場合、私のデザインに何か問題がありますか?テストを実行するロジックはVMに存在する必要がありますか? – Manoj

+0

すべてのモデルには、イベントを処理し、独自の通知プロパティを変更したビューモデルが必要です。次に、これらの子ビューモデルを含む親ビューモデルを作成できます。 –

答えて

1

ビューモデルには、ビューにデータを表示する必要があるすべてのモデルの参照が含まれている必要があります。次に、ビューモデルはモデルクラスのイベントを処理し、NotifyPropertyChangedイベントを発生させる必要があります。

ビューが複雑で多くのモデルが必要な場合は、複数のビューと対応するビューモデルでビューを分割することを検討できます。

+0

私は、異なる時間に変更できる異なるデータを持っています。私は、それぞれのイベントを購読することは難しいと思う。 VMとモデルが通信できる他の方法はありますか? – Manoj

+1

モデルクラスからNotifyPropertyChangedイベントを発生させることができます。次に、これらのイベントをビューモデルで処理し、ビューモデルからNotifyPropertyChangedを再度発生させます。あなたのビューモデルは、何かがモデルで変更されたときを知る必要があります。他の方法は、モデルモデルのプロパティをビューモデルから定期的にチェックし、次に変更されたプロパティをチェックし、それらのプロパティのNotifyPropertyChangedイベントを発生させることです。 – Amit

1

ユーザーは表示するデータを選択すると言うので、あなたのVMはどのモデルが「アクティブ」なのかを示すインデックスの配列を保持でき、そのものとしか通信できないと思います。

この通信では、新しいデータが利用可能になったときに呼び出すアクションをモデルに渡すことができ、そのアクションはVM内のNotifyPropertyChangedをトリガーします。これは、「アクティブな」モデルだけがそのアクションを持っていることを確認し、他のモデルでは「更新をトリガーしない」という意味のヌルであることを確認すると特に効果的です。

関連する問題