1
2
由于您的模型完全适合您的视图,即您的视图(设置对话框)可以直接绑定到模型的数据结构,因此您很幸运地处于 需要 视图模型。 然而,还有许多其他情况并非如此:假设有一个视图是数据库表的直接映射,但您需要一个与此抽象不完全匹配的用户界面。
以“设置对话框”为例,假设模型直接映射到数据库表
|
2
1
你认为你的 模型 其实是你的 视图模型 . ViewModel是支持该视图的类。它通常有一个针对特定技术(如WPF或Silverlight)的API。 因此,ViewModel可以具有ICommand属性,以及为数据绑定提供颜色或画笔的属性。它还可以具有控制特定控件是启用还是禁用,还是完全可见的属性。 所有这些都是面向视图的逻辑,因此生活在视图模型中。 除了玩具应用,你还需要一个合适的 领域模型 但是您不想用所有这些面向视图的逻辑来污染这个模型。它不属于那里-您可能希望重用域模型来公开Web服务或网站,以及inotifyPropertyChanged、icommand属性和不属于那里的内容。 域模型是您的 模型 在MVVM模式中。ViewModel提供了 桥 在视图和模型之间。 |
3
0
ViewModel通常用于绑定到那些影响视图的视觉外观和行为的值。在这种特殊情况下,您将进一步抽象您的模型,只表示设置数据,而不表示任何行为。例如,如果您有一个复选框,当选中该复选框时,会使多个滑块无效,则启用/禁用这些滑块的逻辑将由ViewModel提供,而不是视图本身,而不是模型本身。 查看将设计分解为MVVM的一个有用方法是问问自己,假设我无法与测试中的视图交互,我将如何对视图的行为进行单元测试?通常,您会发现您的大多数行为实际上都与视图捆绑在一起,并且在很大程度上除了功能测试之外是不稳定的。 |
4
0
这个
模型
是您的数据模型。这个
视图模型
是你的模特吗?
视图
. 这个
视图
是一个
视图和视图模型之间存在紧密耦合。视图中的对象绑定到视图模型的属性。如果更改视图的设计,将更改视图模型的设计。一般来说,视图模型是您使用的 而不是 代码落后。
视图模型和数据模型之间存在紧密耦合。视图模型实例通常包含对数据模型实例的引用。视图模型的属性更新数据模型实例中的属性,通常是在设置这些属性时。(但不一定。例如,视图模型实现
有 不 视图和模型之间的耦合。通常,您可以对模型进行实质性的更改,只要它们不具有用户界面含义,也不需要对视图进行更改。通常,您可以在不影响数据模型的情况下对UI的功能进行实质性更改(除非这些更改实际上需要数据模型中的新功能)。 |
Kryptonit364 · 在DataGrid中隐藏调整大小和选择列 2 年前 |
hassan Ma · 从顶部将文本插入WPF文本块 2 年前 |
Arijit · 移动画布内绘制的矩形 2 年前 |
juraj14466 · C#WPF实时图表将点渲染为图像 2 年前 |