私はMVVMを使用してアプリケーションを構築することを学んでおり、次のような状況にあります:
- ViewModel は、 type のオブジェクトのリストを表示する必要があります
Examination
。このリストはビュー内の にデータバインドされ、ListView
そこからフィルタリングされ、ユーザーはActiveExamination
さらに使用するために を選択します。 - モデルレイヤーに「存在する」リポジトリは、「ドメインオブジェクトのメモリ内コレクションとして動作」する必要があり、ViewModel 内でインスタンス化されます。
ここで私の質問は次のとおりです。リポジトリはビューにデータバインドされるコレクションである必要がありますか、それともINPCを実装するプロパティへの「データソース」のみである必要がありますか? 例えば、次の可能性から、どちらかが正しくてどちらかが間違っているのか、それとも両方とも間違っているのか...?
// example where the list is replaced in order to be changed;
// ViewModel class (part of it)
public class ThisViewModel : ViewModelBase {
public List<Examination> ExaminationList {
get { return _examinationList; }
set { _examinationList = value;
NotifyOfPropertyChange("ExaminationList"); }
}
}
var repo = new ExaminationRepository();
ThisViewModel.ExaminationList = repo.getAll().where(ex => ex.Value > 20).ToList();
2 番目のオプション
// Example where the very property IS a repository
// ViewModel class (part of it)
public class ThisViewModel : ViewModelBase {
// the List is actually a repository in disguise.
IEnumerable _examinationList = new ExaminationRepository();
public List<Examination> ExaminationList {
get { return _examinationList; }
set { _examinationList = value;
// This should be "NotifyOfCollectionChange", I guess...
NotifyOfPropertyChange("ExaminationList"); }
}
}
ほとんどの場合、私はここでかなり混乱/間違いを犯していますが、私のアプリケーションはかなり小さくて単純なアーキテクチャであり、この種の問題 (ORM、IoC、 DI)、代わりに、「WPF / MVVMデータバインディング環境で変更可能なリポジトリベースのコレクションを適切に処理する方法」に主に関心があります。
編集: 私のアプリケーションに関するいくつかのコンテキスト: アプリケーションは、臨床検査を実行するアプリケーションです。患者のリストがあり、各患者には検査があります。患者リポジトリと検査リポジトリがあります。PatientList で患者を選択すると、その患者の ExaminationsList に、Examinations リポジトリから一致する Examinations が表示されます。患者と検査に対するユーザー アクションは、CRUD、または最も具体的には BREAD (参照、読み取り、編集、追加、および削除) です。
アドバイスをありがとう!