我熟悉MVVM以及模型,视图模型和视图之间的差异。我唯一无法找到答案的是如何在运行时更新模型。简单的例子向您展示我的意思:
假设我有可以显示图表并将其存储在数据库中的应用程序。
我有模特
public class Session {
public Document Doc { get; set; }
}
public class Document {
public string Name { get; set; }
public Point[] GraphPoints { get; set; }
}
我可以将它们作为参数传递给它们的viewmodel,所以:
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
。