2009-05-23 10 views
6

私のモデルでINotifyProperyChangedやINotifyCollectionChangedのようなUI固有のものを追加せずにモデルの変更を通知するビューモデルを取得する方法や、たくさんのイベントを作成したり、 UI固有のものだと感じていて、モデルから離れていなければなりません。モデルとビジネスロジックのビューロジックをMVVMのビューモデルから外しておく方法を教えてください。

それ以外の場合は、すべてが最新であることを確認するために、ビューモデル内のすべてのビジネスロジックを複製してから、モデルを作成する必要がありますか?

私のモデルでは、「カテゴリ」クラスのプロパティがあります。それをツリー構造と考えることができ、そのプロパティはすべてのリーフノードの子孫です。まあ、モデルでは、そのプロパティはすべての罰金と良いですすべての子供を介して再帰的にオンザフライで生成されます。ただし、ビューモデルはそのプロパティにバインドする必要があり、変更がいつ行われるかを知る必要があります。ビューモデルに合わせてモデルを変更するだけですか?私がそうした場合、ビューモデルは実際には何もしません。モデルは変更に関するすべての必要な通知を生成し、ビューはモデルに直接バインドできます。モデルが私がソースを持っていなかったものであったとしても、どうすればこの問題を回避できますか?

答えて

8

私はINotifyPropertyChangedINotifyCollectionChangedがUI固有であるとは反対です。それらは、特定のUIスタックに関連付けられていない名前空間およびアセンブリ内にあります。そのため、私は通常、できるだけ少ない種類の行動(通常はデータ層)をシステムに入れています。

あなたがそのレベルに配置したくない理由があれば、それは問題ありません。サービスやUIレイヤーなどの上位レベルに配置できます。ただし、データ構造のすべての変更がそのレイヤーを介して行われるようにする必要があります。

+0

実際には、INotifyCollectionChangedはWindowsBase.dllにあるSystem.Collections.Specializedの一部です。私はいつもこの奇妙なことを見つけました。 –

+0

良い点キャメロン。私はそれが同じように混乱していることがわかります。それに応じて私の答えを更新する... –

+0

うーん、私は彼らのことを聞いた唯一の時間は、データバインディング目的のためのWPFチュートリアルのためだと思うが、WPFで使われている以外のWPFについては本質的にWPFはないと思う。 – Davy8

関連する問題