MVVM のカスタム実装から離れようというあなたの決定を見てうれしく思います。
WPF は双方向バインディングに対して非常に強力であり、それが最大の強みとなっています。
ビュー モデルはビューにバインドされ、データ レイヤーと通信するメカニズムとして機能します。また、Entity Framework (フレームワーク 4.0 を使用している場合) は、ViewModel にエンティティを設定するための優れたデータ レイヤーを提供します。これは基本的にあなたのモデルになります。これは、カプセル化された形式の UnitOfWork とリポジトリ パターンを提供します。
すべての例のビュー モデルは通常 1 対 1 ベースですが、設計で必要な場合は、複数のビューにまたがるビュー モデルを使用できます。リスト内の各アイテムのキー識別子を表示する「メニュー」と、同じオブジェクトから編集するすべてのフィールドを表示する詳細フォームがあります。だから私は2つの間のビューにまたがります。
ビュー モデルをデータ コンテキストにバインドする xaml でハード コードするか、Unity を使用してビュー モデルをビューに挿入することができます。残念ながら、データ コンテキストを設定する目的で、1 つのパブリック プロパティを追加する必要があります。したがって、次のようなコードになります。
public class MyView:Window
{
public MyView(MyViewModel model)
{
InitializeComponent();
ViewModel = model;
}
public MyViewModel ViewModel
{
set{ this.DataContext = value; }
}
}
したがって、残りは各フィールドの単なる TwoWay バインディングであり、セッターは単一値の編集をカプセル化できます。エラー メッセージは、フォームのテキスト フィールドにバインドすることもでき、値が null でない場合に表示されます。
また、Unity を掘り下げると、Event Aggregation と呼ばれる本当に優れた機能も得られます。これは、基本的にイベントのパブリッシュ/サブスクライブの手段を提供し、ボタン クリックを処理するときに ICommand 実装に結び付けます。