使用mvvm在运行时更新模型

时间:2016-08-15 19:03:49

标签: c# .net wpf mvvm model

我熟悉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

0 个答案:

没有答案