c# - 模型和 View 模型之间的区别

标签 c# silverlight mvvm windows-phone-7

我以前从未使用过 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/

相关文章:

C#委托(delegate)和抽象类

c# - Resharper:在调试期间显示表达式值

silverlight - 如何在加载 silverlight 时淡入图像?

c# - 屏蔽文本代码。有没有更短的方法?

c# - 在后面的代码中提高ICommand以及两个自定义命令参数

c# - 带有可选 canExecute 的异步 ICommand 实现

android - Kotlin 无法创建 ViewModel 的实例

C# 十进制到数字(?,?)

c# - 如何在变量值更改时触发事件?

c# - 为什么不能在 C# 中声明静态结构,但它们可以有静态方法?