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つは、これは潜在的に非常に大規模なプロジェクト(プラグインと、さまざまなマシンからの多くのデータベースアクセスを含む)であり、すべてが実際に再利用可能であり、モジュールが可能な限り「切断」されている必要があることです。 。