私がこのプロジェクトを始めてからほぼ2年になります。私たちは新しいWPF開発者を雇って、それを正しい方法で軌道に乗せるのを手伝ってくれました。それ以来、それは私の会社で最も成功したソフトウェアプロジェクトの1つになりました。学んだことを学んだ後、自分の質問に正しく答える方法がわかりました。したがって、この回答は2年前の私にとってのものであり、WPFプロジェクトを始めたばかりで、彼らが何をしているのかわからない人もいます。
このプロジェクトを開始する前は、 MVVM(Model-View-ViewModelパターン)について何も知りませんでした。実際、私が最初に質問をしたとき、誰も私にこれについて言及しませんでした。これは、すべてのWPFプロジェクトに必須です。あなたがそれを忠実に守れば、それはあなたのコードベースを整理してテスト可能に保ちます。
私のプロジェクトでは、MVVMのモデルはデータベースと通信するレイヤーです。当初は、データベースを常に開いたままにし、データが必要になったときに常に照会するという計画でした。結局、データの量が非常に少なかったため、データをメモリにロードしてデータベースを閉じました。データをどのように操作するかに関係なく、プログラムの残りの部分はデータがどこから来たのかを気にしません。モデルにデータを要求するだけで、提供されます。
ViewModelは、各UIピースのバックエンドです。たとえば、グラフを表示している場合、ViewModelは、このグラフに表示するために必要なデータを含むオブジェクトです。ViewModelはモデルと通信して、必要な情報を取得します。これはC#で書かれています。
ビューは、グラフを含むUIコンポーネントです。これはXAMLで記述されており、データバインディングを使用して、ViewModelとの同期/通信を維持します。データバインディングは、MVVMパターン全体の鍵です。
単純なデータ視覚化プログラムには、それぞれ独自のViewModelを持つ10個の異なるビューがある場合があります。(各ビューとビューモデルを個別のファイルに配置することをお勧めします。実際、プロジェクト全体をいくつかの小さなプロジェクトに分割することをお勧めします。1つはUI(すべてのXAMLファイル)用、もう1つはViewModels(C#バックエンドコード)用です。 )、1つはモデル(データレイヤー、おそらくC#)用、もう1つは一般的なユーティリティ用など)
データの視覚化に関しては、速度と使いやすさからVisibloxを使用することになりました。Visibloxグラフは、ViewModelsへのデータバインディングとともに、それぞれのビューに含まれています。Visibloxのものに加えて、DataGridsと標準の入力/出力コントロールも使用しました。これらはすべて、データを表示するための単なるUIコンポーネントです。
このアーキテクチャの良いところは、ViewModelsが単にデータを表し、Viewsがそのデータの視覚化を表すことです。それらは互いに完全に離婚しているため、ユニットテストは簡単です。
既存のMVVMフレームワークのいずれかを使用するか、私たちが行ったように独自のフレームワークを作成することをお勧めします。
明らかに、この答えに追加できる情報の教科書の価値があります。これは、MVVMがどのように機能するか、および2年前に自分の質問にどのように答えたかを簡単に説明することを目的としています。