1

PIModel (個人情報モデル) と ViewModel (PIModel などからの情報を含む) があるとします。

public PIModel
{
    private string firstName;
    public string FirstName { get; set; }

    private string lastName;
    public string LastName { get; set; }

    ... // other
}

FirstName プロパティと LastName プロパティを View にバインドする必要があるため、2 つの質問があります。

  • ViewModel には PIModel インスタンスへのプロパティ参照がありますか?
  • その場合、ViewModel には PIModel.FirstName および PIModel.LastName へのプロパティ参照がありますか?

INotifyPropertyChangedモデルでの実装は推奨されないことを知りました。

4

2 に答える 2

2

数年間 MVVM を実践した後、MSDN に 100% 準拠していなくても、答えに少しニュアンスを加えることができます。

私はこの推奨事項に強く同意します: INotifyPropertyChanged をモデルに実装しないでください。

その理由を説明します。モデルがプロパティと INotifyPropertyChanged にすぎない場合、責任という点でのその役割は何ですか? (単一責任の原則について考えてみてください: http://en.wikipedia.org/wiki/Single_responsibility_principle )

あなたの例を見てみましょう: PIModel で INotifyPropertyChanged を使用する場合、PIModel の役割はデータをビューに表示することです。ところで、MSDN 定義における ViewModel の役割は何ですか? あなたはそれを手に入れました:あなたのデータをあなたのビューに提示してください。

結局、Model と ViewModel の両方を使ってデータを提示すると、各コンポーネントの役割がぼやけてしまい、「まあ、ここでは ViewModel も必要ないと思う」というアイデアが浮かぶことになります。データ プレゼンテーションの責任は、別の概念クラスに設定されます。

私の意見では、この種の考えを持っている場合は、ViewModel のみが必要です (ただし、おそらく他の PIViewModel を超えて含まれるより大きな ViewModel が必要です)。コードが複雑になり、価値がなくなるため、貧弱なモデル (プロパティのみで責任をまったく持たないモデル) を構築しないでください。

モデルは、オブジェクトに他の責任を追加する場合にのみ使用し、責任を表示するのではなく (ViewModel に属しているため)、実際のビジネスの責任を示します。

したがって、ほとんどのデータがサーバーから取得され、ほとんどのビジネス責任がサーバー上にある場合、クライアント アプリケーションで主に ViewModel を確認することは理にかなっています。

それが役に立てば幸い。

于 2013-09-12T06:59:37.377 に答える
1

モデルが自己通知型の場合は問題ありません。INotifyPropertyChangedモデルを実装できます。これは msdn の記事です。モデルの実装に関するすべての疑問と、モデルが INPC を実装していない場合の回避策を明確にします。

http://msdn.microsoft.com/en-us/library/gg405484%28PandP.40%29.aspx

したがって、モデルが実装できるカテゴリに該当しない場合INotifyPropertyChanged(データベースで自動生成されたエンティティなど)、VM のモデル プロパティにラッパー プロパティを書き込む必要があります。

しかし、率直に言って、INPC を実装できるのであれば、コードの不要な重複や保守を省くことができるので、そうするべきです。

于 2013-09-12T02:22:32.577 に答える