我一直在网上四处寻找,以便更好地了解MVVM
。
在Wikipedia上,它指出MVVM
模式的组件是:
这是我第一次遇到binder
定义以及作为首字母缩略词一部分的model
,view
,view-model
。
MVVM
的维基百科定义
的“Binder”声明如下:
声明数据和命令绑定隐含在 MVVM 模式中。在
Microsoft
解决方案堆栈中,binder
是markup language
,称为 XAML 。 绑定器使开发人员不必编写样板,以同步view model
和view
。 在Microsoft
堆栈之外实现时,声明性databinding
技术的存在是该模式的关键推动因素。
问题:每个MVVM
模式始终是否包含binder
?完全用于binder
的是什么?
它实际上是代码还是只有framework
的自动化?
我几乎每天都在工作和使用AngularJS
,有些人认为其模式为MVVM
而不是MVC
/ MVP
。我得到了View Model
AngularJS
调用"Controller"
的内容,作为对“经典”MVC
的回忆。
但AngularJS
也使用了binder
吗?在AngularJS
编码时我仍然没有看到类似的东西,也许binder
只是用在桌面编程框架而不是浏览器上?
在维基百科上,它WPF
的{{1}}作为XAMl
的{{1}}示例,那么C#
的反例是什么? binder
的{{1}}和/或他们的AngularJS
也是AngularJS
和/或templates
?
您是否可以提供维基百科文章的更好解释,可能有几个例子(syntax
和/或view
)?
编辑:我对binder
进行了详细介绍,发现与these slides类似,介绍了术语AngularJS
而不是WPF
,所以:这是SO
我们在讨论一个可选项,它是否出现在MVB
和MVVM
中?
binder
仅引用MVVM
和MVB
之间的binder
吗?您如何在图表上代表data-binding
?它就像this one上的“数据绑定”一样吗?
谢谢。
答案 0 :(得分:4)
A"绑定" something 描述视图模型中的数据将如何显示在视图中。 A"活页夹"是一些执行绑定所描述的操作的组件。绑定器对于MVVM框架很重要,因为它们允许您将View与ViewModel分离,并且使用重权重来处理两者之间的状态同步。
活页夹执行以下操作
请注意,初始状态的引入也是状态的变化,更新的行为取决于绑定的解释。
据我所知,没有编程语言将绑定的概念融入语言中(即通过语言功能同步对象的两个实例的状态,如何观察者模式被烘焙到C#中作为events),因此在设计实现MVVM模式的系统时必须对绑定器进行编码。
维基百科对你的问题所描述的活页夹的定义非常糟糕。他们将标记语言与绑定行为混为一谈。 Xaml,WPF的标记语言,只是描述对象图的XML。它通过添加 markup extensions 来扩展xml, INotifyPropertyChanged
properties 是通过特定格式的属性值定义的。
<!-- Attributes that are curly bracketed {} are markup extensions -->
<TextBox x:Name="My textbox lol" Text="{Binding Name}" />
xaml反序列化器将这些特殊属性识别为标记扩展,实际上是扩展MarkupExtension
的类。 xaml反序列化器在反序列化过程中包含它们。上面示例中的Binding类是MarkupExtension
的类型,是WPF中绑定程序的主要(但不是唯一!)实现。
WPF中的绑定系统非常复杂。它主要基于DependencyProperties,但可以与POCO进行良好的交互,并且以有限的方式与ko.applyBindings()
属性进行交互。在反序列化期间,这些绑定将按标记中的描述进行实例化和配置,然后使用绑定子系统将视图和视图模型绑定在一起。
我比使用Angular更熟悉淘汰赛,但过程类似。您可以在UI中定义绑定,在构建DOM之后不久,框架会解释绑定。这是由框架本身确定的某种机制触发的。然后,框架解释这些绑定,以便将View Model中的可观察属性与UI绑定。
如果没有这种解释工作,你的绑定定义只会放在你的HTML中,什么都不做。有些东西必须解释它们并设置将处理状态同步的绑定。
在Knockout中,当您调用{{3}}并传入View模型时会发生这种情况。如果不调用它,所有data-bind
绑定定义将在您的html中未使用。
这个过程如何在每个框架中发生,如何实现,以及每个框架调用绑定的内容都可能不同。
答案 1 :(得分:2)
维基百科不是一切都来自的地方。首先,阅读WPF和Silverlight架构师John Gossman撰写的这篇博客文章:
Managed VMs are in beta
看到?没有任何&#34; Binder&#34;在那里。他写的是:
Model / View / ViewModel还依赖于另一件事:数据绑定的一般机制。
要理解MVVM真正读到的这篇文章的第一句话:
Model / View / ViewModel是模型/视图/控制器(MVC)的变体,专为现代UI开发平台量身定制,其中View是设计师而非经典开发人员的责任。
绑定机制不是模式本身的一部分。它是一种基础技术,对于应用这种模式至关重要。