2

MVVM 設計では、 と はどのようにViewModel通信してModel、両方を同期させる必要がありますか?

私がこれまでに読んだことによると、ほとんどの記事は、 が をViewModelラップしているためModelViewModelが に直接アクセスできることを示していModelます。この場合、 はViewModel上のデータを直接取得および更新できますModel

ただし、 の一部のデータがModelを介さずに更新された場合はどうなりViewModelますか? この場合、ViewModelは監視もデータ バインドも行わないため、 はModel、 のデータが (ViewModel 自体からではなく) 外部で変更されたことや、が他のモデルと対話してそのデータが変更されたときViewModelに認識されません。はに通知しません。ModelModelViewModelView

では、 は とどのようにViewModel通信してModel、両方を同期させる必要がありますか?

4

2 に答える 2

2

モデルは INotifyPropertyChanged インターフェイスを実装する必要があります。ViewModel は、対応するイベントをサブスクライブし、モデルの変更時に独自の PropertyChanged 通知を発行して、ビューが更新されるようにすることができます。

モデル クラスは通常、 INotifyPropertyChangedおよびINotifyCollectionChangedインターフェイスを介して、プロパティとコレクションの変更通知イベントを提供します。これにより、ビューで簡単にデータ バインドできます。オブジェクトのコレクションを表すモデル クラスは、通常、 ObservableCollectionクラスから派生します。

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

モデル (およびその他のもの) を INotifyChanged で台無しにしないために、Notify Property Weaver Extensionを使用することをお勧めします: http://visualstudiogallery.msdn.microsoft.com/bd351303-db8c-4771-9b22-5e51524fccd3

于 2012-10-26T08:16:29.533 に答える
0

モデル内の一部のデータがViewModelを介さずに更新された場合はどうなりますか

その場合で、この更新をモデルの外部に公開したい場合は、モデルはそれを行うために何かを実装する必要があります(例:イベント)

ビューモデルは、このイベントをサブスクライブしてビューに通知するだけです。

于 2012-10-26T06:14:30.063 に答える