0

私は最近、MVVM を使用して WinForms でデータをバインドする方法を探していました。最終的に、MVVM パターンのカスタム実装を作成しました。ただし、双方向バインディングがないため、WPF を試してみることにしました。

非 UI 機能をカプセル化するモデルが既にあります。たとえば、モデルは構成ファイルを読み取り、いくつかのプロパティを持ち、ソケットで着信データをリッスンし、必要に応じて着信パケットを保存します。モデルのプロパティの一部は、範囲外に設定されている場合に例外をスローします。つまり、検証はモデルで行われます。

検証は通常、WPF でどのように行われますか? 私はかなりの記事を読みましたが、ViewModel に検証を入れることにはある程度の一貫性があるようです。実際、ほとんどの記事では ViewModel と View のみを使用しています。モデルは埋葬されましたか?

4

1 に答える 1

1

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 実装に結び付けます。

于 2012-06-06T20:29:46.647 に答える