2012-04-10 29 views
7

ViewModelsとは何が最良か分かりました。インターフェイスINotifyPropertyChangedを実装する方が良いか、またはObservableObjectから派生する方が良いですか?ObservableObjectまたはViewModelsでINotifyPropertyChanged

ObservableObjectクラスはINotifyPropertyChangedを実装し、退屈なコードの一部はRaisePropertyChangedのようにします。

INotifyPropertyChangedPropertyChangedイベントを実装する必要があります。

私の観点からは、ObservableObjectを使用する方がより論理的ですが、ほとんどのチュートリアルではViewModelINotifyPropertyChangedインターフェイスを実装しています。

あなたはそれが単純化のためか、論理的な理由があると思いますか?

答えて

14

ObservableObjectは、Microsoft.Practices.Composite.Presentation - Prismの一部です。また、MVVM LightMVVM Foundationに実装されています。

INotifyPropertyChangedは、System.ComponentModelの一部です。つまり、コアライブラリに含まれています。

したがって、プリズムやその他のフレームワークをまだお持ちでない場合は、INotifyPropertyChangedを付けてください。このクラスを取得するだけではそれを含めることにはほとんど意味がないようです。

+1

ObserveableObjectもMVVM Lightで実装されていると思います。 – Robaticus

+2

またはhttp://mvvmfoundation.codeplex.com/? – Gabe

+0

確かに。私はMVVM Lightを使って既に作成されたプロジェクトを見ていました(私はフレームワークを混乱させました)。だから私の場合、おそらくそれを使用したいと思うでしょう。ありがとう。 – Xavier

0

一般に、他のすべてが等しい場合は、インターフェイスを実装して祖先クラスから派生するアプローチを使用することをお勧めします。あなたは好きなだけ多くのインターフェースを実装することができますが、親は1つしかないので、私は親を「賢く」使うことを好みます。私がインターフェイスを実装したいものを手に入れることができる場合、私は後で自分のオプションを継承のために開いたままにすることを好みます。

+1

ObservableObjectのようなもので、これを継承し、後で別のクラスから継承する必要がある場合、新しいスーパークラスがObservableObjectから継承されるようにすることができます。 –

1

多くのViewModelを実装している場合は、INotifyPropertyChangedを実装するのに必要な配管コードがたくさんあり、独自のViewModelベースクラスを作成する方が良いでしょう。 MVVMフレームワーク(MVVM Lightが私の選択のフレームワークです)によってあなたのために提供されたものの1つです。

そうでなければ、あなたは本当に「DRY」(自分自身を繰り返さない)ではありません。

編集 - ObservableObjectは、他のもののいくつかをあなたにINPCを与えますが、除外、通常のViewModelクラスがするのと同じ基本的な事柄のほんの軽量実装です

は覚えておいてください誤って考えます完全なViewModelで使用できます。

関連する問題