我听说它是构建WPF UI的下一个最好的东西,但是所有现有的 示例有几十行代码 - 我可以获得一个Hello World 对于MVVM来说,毫不含糊地解释了它的全部内容? 我对C#/ .net也很新,所以也许请点我一些 资源也有帮助呢?
非常感谢!
答案 0 :(得分:73)
一句话解释:
MVVM是对备受好评的Model-View-Presenter(MVP)模式的重新构想,该模式旨在与WPF提供的数据绑定工具一起使用,以将应用程序逻辑与UI设计分开。
更长,更有用的解释:
MVVM的基本概念是将WPF应用程序分解为单独的组件,每个组件在获取屏幕信息的过程中都有一个责任。
首先你有模特。这是一个功能非常有限的类,通常从某些外部源(如数据库或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");
}
}
}
}
最后你有了View。这是一个xaml文件,描述了用于在ViewModel中显示和编辑数据的控件的布局:
<Canvas>
<TextBox Text={"Binding Message"} />
</Canvas>
您完成所有这些工作的原因是模型非常轻量级,并且很容易跨域边界传递。从Web服务发送或接收它或将其映射到数据库表很简单。另一方面,ViewModel很复杂,但依赖性很少 - 它不关心模型从何处获取数据,只关注它的存在而且它根本没有视图的概念,这使得它非常可测试(您的应用程序的逻辑不依赖于UI来测试)。最后,xaml被很好地区分开来,可以交给一个设计师,他不需要知道应用程序的逻辑,只有ViewModel会以某些名称呈现某些数据。这种封装使得在大型项目中定义角色变得非常容易,或者在真实的项目被抛光的过程中组合有限的UI来测试逻辑。
答案 1 :(得分:38)
MVVM是一个明星粉丝的关系。粉丝知道明星,但明星不知道粉丝。粉丝非常喜欢他的明星,如果明星改变自己(我的意思是他的穿衣风格),那么粉丝会相应地改变自己。
现在将“star”替换为“ViewModel”,将“fan”替换为“View”并再次阅读。
答案 2 :(得分:14)
一句话?到此为止。
MVVM是一种UI隔离模式,其中Xaml(View)绑定到一个Facade(View Model),允许您的程序(Model)的内容避免让UI关注漏掉一层。
答案 3 :(得分:8)
帮助我最好地理解它的简单陈述是“我可以在没有用户界面的情况下对我的业务逻辑进行单元测试吗?”我认为这应该是您在使用MVVM概念学习和设计时提出的问题。
答案 4 :(得分:4)
This site有一个很好的图表可以解释它。
基本上你有3个组成部分:
1)模型 - 应用程序的数据模型。这是非常标准的,与任何MVP或MVC应用程序相同
2)查看 - 定义应用视图/布局的XAML
3)查看模型 - 因为WPF要求视图以某种方式附加到事物上(例如要求集合实现INotifyCollectionChanged和类似的东西),它通常需要您按摩数据一点点才能获得它以适合视图显示的形式。这是视图模型编码的位置。它将数据打包到视图可以轻松显示的视图模型中。这是您的视图XAML将绑定到的。它必须响应模型层中的事件并自行更新。
(然后你的控制器挂在某处 - 理想情况下使用WPF命令 - 并对模型进行更改,从而触发事件以更新视图模型)
答案 5 :(得分:1)
前端(视图)和后端(模态)使用公共中介(视图模式)进行通信(来回)的模式。
答案 6 :(得分:1)
MVVM模式是指UI与xaml友好的中间对象接口,以获取对您不熟悉的xaml实际数据。
答案 7 :(得分:0)
我会说:“用于分离用户界面与其逻辑之间关系的表示模式”
答案 8 :(得分:0)
改进的答案:
MVVM就是未来;您希望将应用程序逻辑与框架分离,以便框架可以发展,并且您的应用程序可能不必更改,或者您的应用程序可以发展,您不必担心更改实际的UI方面。< / p>实际上,MVVM是一种已经存在一段时间的模式的改进。我记得当我在MFC工作时不断改进模式。这样做至少有两个原因。 MFC或&lt;&gt;相当复杂,将MFC结构与应用程序逻辑混合使应用程序变得脆弱。示例:如果支持列表/选择器内容的逻辑与操作列表/选择器本身的逻辑相结合,则用组合框(或现代术语中的选择器)替换列表框要困难得多。
答案 9 :(得分:0)
一些非常好的单句(或接近它)的解释已经存在。我只想补充说,如果你已经超过了基础级别,并且想要一个如何在具有菜单,工具栏,选项对话框,对接工具窗口等的真实应用程序中使用MVVM的示例。 ,看看SoapBox Core和demo using SoapBox Core。它是开源的,因此您可以获得很多想法。
答案 10 :(得分:0)
因为您无法将数据绑定到您自己的代码隐藏
(这里只是半开玩笑)