5

Entity FrameworkモデルでMVVMパターンを使用して、C#でデスクトップアプリケーションを作成しています。私はVMでDependencyPropertiesを使用する傾向があり、(一般的に)INotifyPropertyChangedの実装よりもこのシステムを好むようになりました。一貫性を保ちたいと思います。私のVMはモデル内のエンティティにアクセスし、物事をかなり分離しておくことができました。ビューにはバインディング名とコマンド名を除いてVMの知識がなく、モデルにはVMの知識があります。

VMでINotifyPropertyChangedを使用すると、モデル内のエンティティを更新するのは非常に簡単なようです。

public string Forename
    {
        get { return CurrentPerson.Forename; }
        set
        {
            if (Forename != value)
            {
                CurrentPerson.Forename = value;
                NotifyPropertyChanged("Forename");
            }
        }
    }

...ここで、CurrentPersonは、エンティティデータモデルによって自動作成されたPersonオブジェクトです。したがって、フォアネームを格納するために特別に作成されたプライベートフィールドはありません。

DependencyPropertiesを使用すると、DPを作成し、GetValueとSetvalueを使用してデフォルトのプロパティを追加してから、CurrentPersonエンティティを更新するためにPropertyChangedCallbackを使用する必要があるようです。この状況でコールバックを呼び出すと、他のVMとの一貫性を保つためにオーバーヘッドが追加されるようです。

したがって、問題は、これらの方法のいずれかが私が物事を行う方法であるかどうかです。この場合、DependencyPropertyまたはINotifyPropertyChangedを使用する必要がありますか?指摘すべきことの1つは、これは潜在的に非常に大規模なプロジェクト(プラグインと、さまざまなマシンからの多くのデータベースアクセスを含む)であり、すべてが実際に再利用可能であり、モジュールが可能な限り「切断」されている必要があることです。 。

4

1 に答える 1

2

DependencyPropertyの代わりにINotifyPropertyChangedを使用することをお勧めします。ViewModelsでDependencyPropertyを使用しない主な理由は、DependencyPropertyがWindowsBase.dllにあるためです。これは、Windows UIに少し結びつきすぎます(少なくとも私見)。

INotifyPropertyChangedを使用すると、さまざまなプラグインが希望どおりに実装できるため、保守がはるかに簡単になります。依存関係プロパティを強制する場合、すべてのビューモデルはDependencyObjectから継承する必要があります。

INotifyPropertyChangedおよびDependencyPropertyの使用の詳細については、次の記事を参照してください:http: //kentb.blogspot.com/2009/03/view-models-pocos-versus.html

別の裏付けとなる答え:https ://stackoverflow.com/a/783154/27669

于 2012-09-16T19:59:43.910 に答える