MVVMとモデル、ビューモデル、ビューの違いについてよく知っています。答えが見つからないのは、実行時にモデルを更新する方法だけです。私が何を意味するかをお見せするための簡単な例:実行時にmvvmを使用してモデルを更新する
のは、私は、グラフを表示し、データベースに保存することができるアプリケーションがあるとしましょう。
は私が持っているモデル
public class Session {
public Document Doc { get; set; }
}
public class Document {
public string Name { get; set; }
public Point[] GraphPoints { get; set; }
}
私は、それらをパラメータとして渡すことによって、彼らののviewmodelsにそれらを接続することができますとき
public class SessionViewModel{
private readonly Session _session;
public SessionViewModel(Session session)
{
this._session = session;
}
}
public class DocumentViewModel{
private readonly Document_document;
public SessionViewModel(Document document)
{
this._document = document;
}
}
public class ShellViewModel {
public SessionViewModel SessionVm { get; set; } // <-- Bind in view
public DocumentViewModel DocumentVm { get; set; } // <-- Bind in view
private Session _session;
public ShellViewModel()
{
_session = new Session();
session.Doc = new Document();
SessionVm = new SessionViewModel(session);
DocumentVm = new DocumentViewModel(session.Doc);
}
}
問題は私が決める私のアプリケーションのライフサイクルの途中で表示されますdocument
の値を変更します。たとえば:
public void OnNewDocumentLoaded(Document newDoc)
{
_session.Doc = newDoc;
}
_session.Doc
を変更しましたが、すべてのDocumentViewModel
は、コンストラクタに渡されたdocument
の独自のインスタンスを持っているので、私はモデルを変更していても、私のviewmodelは同じまま。
モデルは、フレームワークについて知っているべきではないと私の理解から、これは悪いアプローチであるため、また、私は、私のモデル内INotifyPropertyChanged
を使用する必要はありません。また、私は自分のモデルをPCLプロジェクトに保存しているので、私のモデルにINotifyPropertyChanged
を実装することさえできません。
私はモデルにINotifyPropertyChangedを実装していますが、これはかなり典型的なようです。 http://stackoverflow.com/questions/6922130/in-mvvm-model-should-the-model-implement-inotifypropertychanged-interfaceを参照してください。私は、ダーティー/セーブ/ロードを管理し、変更をVMに通知するモデルにPOCOとデータオブジェクトをラップします。このよう – Joe
:あなたは何か他のものへのWPF変更したいとしましょうのでhttp://blog2.rees.biz/_/rsrc/1271023681400/Home/mvvmpattern/wpflobmvvm-thumb1.png – Joe
私は、これは悪い習慣だと思います。モデルを修正する必要があります。また、私はプラットフォームに依存しないPCLプロジェクトに自分のモデルを保存すると言った。 – FCin