MVVM:模型的状态是属于模型还是 View 模型?

标签 mvvm

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




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

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

然后我想将整个状态从模型移动到 View 模型,但这并不适合我,因为我在概念上认为 View 模型具有 View 的状态而不是模型的状态。

什么是最被接受的放置状态的地方?

最佳答案

您正确感知具有 View 状态的 ViewModel。从概念上讲,模型的状态是模型的一部分,但它可能会因您的特定场景而异。将模型视为数据:作为可以序列化的东西,可以来自服务器和/或可以/应该保存在数据库中。

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

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

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'); }
    }
}

关于MVVM:模型的状态是属于模型还是 View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16098370/

相关文章:

mvvm - knockout 模型与 ViewModel

android - 我应该如何在 Android 上使用 MVVM + 数据绑定(bind)创建表单的字段验证

c# - 在另一个线程中创建 WPF 命令

c# - Xamarin 表单切换按钮

c# - MVVM - 在 ViewModel 中使用实体

c# - 如何在 ObservableCollection 构建的 View 中动态设置用户控件的 grid.column/row

wpf - 如何获取 WPF 数据网格中的当前元素以及如何使用它执行某些操作?

wpf - 当 View 模型在构造函数中有参数时,如何将 View 模型连接到 View ?

c# - 在ViewModels之间共享observableCollection

silverlight - 在 Silverlight 4 中使用带有 MVVM 模式的行为和动画