C# 在mvvm的ViewModel类中创建视图类的对象

C# 在mvvm的ViewModel类中创建视图类的对象,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在用c#wpf开发mvvm,我对mvvm有一点了解。 我正在ViewModeClassL中创建视图类的对象。那么它是否违反了mvvm模式?怎么做?如果有人对此进行详细解释,那就太好了。MVVM模式的整个要点是保持视图(向用户显示控件的显示)与模型(数据、业务逻辑、数据访问)和视图模型(模型和视图之间的粘合剂)的分离。VM不必担心UI(即视图)问题,因此在viewmodel中创建和使用视图违反了MVVM模式 视图几乎总是由UI元素组成,如按钮或文本块。Viewmodel应该关注诸如属性之类的内

我正在用c#wpf开发mvvm,我对mvvm有一点了解。
我正在ViewModeClassL中创建视图类的对象。那么它是否违反了mvvm模式?怎么做?如果有人对此进行详细解释,那就太好了。

MVVM模式的整个要点是保持视图(向用户显示控件的显示)与模型(数据、业务逻辑、数据访问)和视图模型(模型和视图之间的粘合剂)的分离。VM不必担心UI(即视图)问题,因此在viewmodel中创建和使用视图违反了MVVM模式

视图几乎总是由UI元素组成,如按钮或文本块。Viewmodel应该关注诸如属性之类的内容,例如
用户名
,或
开始日期
,或
警告状态
。然后,这些VM属性(通过
数据绑定
)绑定到视图中UI元素的属性。。。因此,视图依赖于VM,而不是相反。VM从中获取数据以填充这些属性的地方首先是模型,或者对于数据输入来说,它们可能一开始都是空白的,并且应用程序依赖于用户在视图中输入数据

例如,您可能希望将WarningState绑定到文本框,但同样可以将其绑定到组合框。或者,您可以使用转换器将其绑定到矩形的前景色,或用于其他完全不同的内容的UI元素的背景色


关键是,这些都是虚拟机不需要担心的事情:它所关心的只是呈现数据/状态。这取决于视图如何处理该信息(或不处理该信息)。通过这种方式,您可以用不同的版本完全替换视图,而不必更改VM中的任何内容。。。您已成功地将显示与逻辑分离。

“那么它是否违反了mvvm模式?”是的。视图模型不应该知道view.thanx的注释,但是你能解释为什么吗?我是MVVMV新手,搜索一下网页怎么样?有很多在线资源。MVVM的要点是可测试性。。。这就是为什么要将视图与视图模型分离。完成后,您可以对视图模型进行单元测试,而无需测试视图。当MVVM没有提到单元测试时,很难认真对待它的解释。这绝对是MVVM的一个观点。我试图做出一个简单的解释,因为正如克莱门斯指出的,有大量的在线资源来指导OP的学习。我的回答不完整,但我认为这并不意味着我提出的观点“难以认真对待”。如果您可以交换一个视图,并完全用一个完全不同的视图替换它,并且不必更改关于您的模型或VM的任何内容,那么您可以非常高兴您成功地分离了您的关注点。在Winforms中尝试这样做(不使用MMVM)。