我以前从未使用过 MVVM,所以我可能遗漏了一些明显的东西。当我创建一个新的 Panorama 应用程序时,已经有一个包含 ItemViewModel 和 MainViewModel 的 ViewModel 文件夹。
我认为“MainViewModel.cs”是组织全景图的文件。但是,在 MainViewModel 中,它有这一行:
public MainViewModel()
{
this.Items = new ObservableCollection<ItemViewModel>();
}
ItemViewModel 与全景图没有交互。这些是然后像这样实例化的:
this.Items.Add(new ItemViewModel()
{
LineOne = "first line",
LineTwo = "second line",
LineThree = "third line"
});
为什么 ItemViewModel 不只是一个“模型”?它实现了 INotifyPropertyChanged,但目的是什么?我原以为 MainViewModel 中的 ObservableCollection 足以通知任何更改,如 demonstrated here
最佳答案
区别很简单。
模型包含业务逻辑。
View 模型包含表示逻辑,并另外调整以适应 View 。
在您的例子中 - View 模型实现了 INotifyPropertyChanged
。这是纯粹的表示逻辑。
模型不负责通知某个特定的 UI 发生了某些变化,它负责传输发票、计算工资等。
有时(当模型很简单时)这种抽象是不必要的。
一些 wiki引用:
模型:在经典的MVC模式中,模型指的是
(a) 表示真实状态内容的对象模型(面向对象的方法),或
(b) 表示该内容的数据访问层(以数据为中心的方法)。
ViewModel:ViewModel 是“ View 的模型”,这意味着它是 View 的抽象,也用于 View 和模型之间的数据绑定(bind)。它可以被看作是 Controller (在 MVC 模式中)的一个特殊方面,它充当数据绑定(bind)器/转换器,将模型信息更改为 View 信息并将命令从 View 传递到模型。 ViewModel 公开公共(public)属性、命令和抽象。 ViewModel 被比作数据的概念状态,而不是模型中数据的真实状态。
关于c# - 模型和 View 模型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3822425/