首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM:模型的状态属于模型还是视图模型?

MVVM:模型的状态属于模型还是视图模型?
EN

Stack Overflow用户
提问于 2013-04-19 14:13:10
回答 1查看 243关注 0票数 2

我正在构建一个将基于MVVM的应用程序。我已经解决了我的大部分设计问题,但留下了一个概念上至关重要的问题:我的ViewModel或我的模型是否应该包含模型模型的状态?

最初,我认为模型应该包含自己的状态,但事实证明,在将状态传递给ViewModel (它拥有模型状态的90% )时,涉及到许多样板文件。

然后我想将整个状态从模型转移到ViewModel,但这对我来说并不是很合适,因为我在概念上认为ViewModel更多地具有视图的状态,而不是模型的状态。

把国家放在什么地方是最被接受的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-19 15:31:56

您正确地理解了ViewModel具有视图的状态。从概念上讲,模型的状态是模型的一部分,但它可能会根据您的特定场景而变化。将模型看作数据:可以序列化的东西,可以来自服务器和/或可以/应该持久存储在数据库中的东西。

例如,如果您有一个购物车,那么运送车的项目显然是模型的一部分。但是,结帐过程中的状态(已收到付款方式、付款方式已验证、用户已确认)可以任意选择。

至于样板-对我来说,使用合理数量的样板很好的范例是在ViewModel中包含(实际上,在c#中引用)整个模型,并公开模型中所有属性的getter和setter,以及适当的even通知。例如:

代码语言:javascript
复制
class PersonModel {
    public string firstName { get; set; }
    public string lastName { get; set; }
}

class PersonViewModel : INotifyPropertyChanged {
    private PersonModel model;
    // next 4 lines can be factored out to a BaseViewModel class
    private PropertyChangedEventHandler PropertyChanged;
    private raise(string propName) {
        this.PropertyChanged( new PropertyChangedEventArgs(propName) );
    }

    // ... repeat for each property in the model
    public string firstName {
        get { return model.fistName; }
        set { model.firstName = value; raise('firstName'); }
    }
    public string lastName {
        get { return model.lastName; }
        set { model.lastName = value; raise('lastName'); }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16098370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档