WPF中MVVM的一句话解释?

我听说它是​​构buildWPF UI的下一个最好的例子,但是所有现有的例子都有几十行代码 – 我可以得到一个MVVM的Hello World,它毫不含糊地解释了它的一切吗? 我对C#/ .net也是一个新手,所以也许可以指点一些可以帮助的资源?

非常感激!

一句话解释:

MVVM是深受喜爱的Model-View-Presenter(MVP)模式的重新构想,它被devise成与WPF提供的数据绑定工具一起工作,以将应用程序逻辑与UIdevise分开。

更长,更有用,解释:

MVVM的基本概念是将WPF应用程序拆分成单独的组件,每个组件在屏幕上获取信息的过程中都有一个责任。

首先你有模型。 这是一个function非常有限的类,通常从一些外部来源(如数据库或Web服务)填充。 例如:

public class MessageModel { public string Message { get; set; } } 

除此之外,您还可以对ViewModel进行分层,这是应用程序逻辑所在的位置,它将通知模型更改的视图,并确保数据的一致性。 通过实现INotifyPropertyChanged接口,ViewModel和视图之间的双向数据绑定由WPF免费提供:

 public class MessageViewModel : INotifyPropertyChanged { private MessageModel _model; public string Message { get { return _model.Message; } set { if (_model.Message != value) { _model.Message = value; OnPropertyChanged("Message"); } } } } 

最后你有观点。 这是一个xaml文件,它描述了用于在ViewModel中显示和编辑数据的控件的布局:

 <Canvas> <TextBox Text={"Binding Message"} /> </Canvas> 

你完成所有这些工作的原因是模型是非常轻量级的,并且容易通过域边界。 发送或接收来自Web服务或将其映射到数据库表很简单。 另一方面,ViewModel是复杂的,但是依赖关系很less – 它不关心模型从哪里获取数据,只有它在那里,而且它根本没有视图的概念,这使得它非常可testing你的应用程序的逻辑不依赖于UI来testing)。 最后,xaml分区很好,可以交给一个不需要了解应用程序逻辑的devise人员,只是ViewModel会以特定的名字显示某些数据。 这个封装使得在大型项目中定义angular色变得非常容易,或者将有限的UI放在一起来testing逻辑,而不是真正的抛光。

MVVM是一个明星粉丝的关系。 球迷知道明星,但明星不知道球迷。 球迷非常喜欢他的明星,如果明星改变自己(我的意思是他的穿衣风格),粉丝会相应地改变自己。

现在将“ViewModel”和“fan”replace为“View”,并再次阅读。

一个句子? 开始。

MVVM是一个UI分离模式,其中Xaml(视图)绑定到一个外观(视图模型),允许您的程序(模型)的胆量,以避免用户界面担心泄漏一层。

这个简单的说法帮助我最好的解决了这个问题:“我可以在没有用户界面的情况下unit testing我的业务逻辑吗? 我认为这应该是您在使用MVVM概念进行学习和devise时所问的问题。

这个网站有一个很好的图解释它。

基本上你有3个组件:
1) 模型 – 您的应用程序的数据模型。 这是相当标准的和任何MVP或MVC应用程序相同。
2) 视图 – 定义您的应用程序的视图/布局的XAML。
3) 查看模型 – 因为WPF要求视图以某种方式附加到事物上(比如要求集合实现INotifyCollectionChanged以及类似的东西),通常需要将数据按摩一点,以适合视图的forms显示。 这是视图模型编码的地方。它将数据打包到视图可以轻松显示的视图模型中。 这是您的视图XAML将绑定到。 它必须响应来自模型层的事件并更新自身。

(然后你的控制器挂在某个地方 – 理想情况下使用WPF命令 – 并对模型进行更改,从而触发事件来更新视图模型)

前端(视图)和后端(模态)使用通用介体(视图模式)进行通信(前后)的模式。

MVVM模式是当UI与一个xaml友好的中间对象进行交互以获取对xaml不友好的实际数据时。

我会这样说:“用户界面和它的逻辑关系分离的表示模式”

一个改进的答案:

MVVM是关于未来的; 您想要将应用程序逻辑从框架中分离出来,以便框架能够发展,并且您的应用程序可能不必更改,或者您的应用程序可以发展,您不必担心如何更改实际的UI方面。

实际上,MVVM是一种已经存在一段时间的模式的改进。 我可以记得当我在MFC中工作时演变的模式。 这样做至less有两个原因。 MFC或<>是相当复杂的,并且将MFC构造与您的应用程序逻辑混合使得应用程序变得脆弱。 例如:如果用于支持列表/select器内容的逻辑与用来操作列表/select器本身的逻辑相结合,则用combobox(或现代术语中的select器)replace列表框要困难得多。

已经有一些非常好的单句(或接近它)的解释。 我只是补充说,如果你已经超过了基本级别,你想要一个如何在真实世界的应用程序中使用MVVM的例子,这些应用程序有菜单,工具栏,选项对话框,对接工具窗口等等。 ,看看SoapBox核心和这个演示使用SoapBox核心 。 它是开源的,所以你可以得到很多的想法。

因为你不能将数据绑定到你自己的代码隐藏

(只有一半在这里开玩笑)