当前位置:  开发笔记 > 编程语言 > 正文

MVVM“活页夹”的定义及其用法?

如何解决《MVVM“活页夹”的定义及其用法?》经验,为你挑选了1个好方法。

我一直在互联网上四处寻找,以便对MVVM一般情况有更好的了解。

在Wikipedia上,它指出了MVVM模式的组成部分:

模型

视图

查看模型

活页夹

这是我第一次遇到的binder定义与一起modelviewview-model这是缩写的一部分。

维基百科的定义中的MVVM 的‘活页夹’规定如下:

声明性的数据和命令绑定在MVVM模式中是隐式的。在Microsoft溶液堆中,binder是一个markup language称为XAML。活页夹使开发人员免于编写模板逻辑来同步view model和的义务view。当在Microsoft堆栈外部实现时,声明性databinding技术的存在是该模式的关键推动因素。

问题:每个MVVM模式都总是包含一个binder吗?到底是做binder 什么用的?是您实际编写的东西,还是只是有些自动化framework

AngularJS几乎每天都在工作和使用,并且有些人同意它的模式MVVMMVC/ 相反MVP。我知道,View Model这就是AngularJS所谓"Controller"的“经典” MVC。但是也AngularJS使用binder吗?在进行编码时AngularJS,我仍然没有看到类似的东西,也许binder只是在桌面编程框架而不是在浏览器上使用?

在维基百科上它给出WPFXAMl是一个C#的例子binder,所以这将是对反例AngularJS?在AngularJStemplates和/或他们syntaxview和/或binder过?

您能否通过几个示例(AngularJS和/或WPF)更好地解释维基百科的文章?

编辑:我看了更多SO,发现这些幻灯片引入了一个类似的术语,MVB而不是MVVM,因此:这是binder我们在谈论的一个可选内容,它同时出现在MVVM和中MVB吗?

是否binder只是指data-binding之间正在进行ViewView-Model?您将如何binder在图表上表示?难道就像“数据绑定”在这一个?

谢谢。



1> 小智..:

“结合”是什么,描述了如何在视图模型中的数据将在视图中显示。“绑定器”是执行绑定描述的动作的某些组件。绑定器对于MVVM框架很重要,因为它们使您可以将View与ViewModel分离,并且承担了在两者之间进行状态同步的沉重负担。

活页夹执行以下操作

解释(通常是)UI中定义的绑定

观察视图模型的状态变化并更新视图

观察视图的状态变化并更新视图模型

注意,引入初始状态也是状态的变化,并且更新操作取决于绑定的解释。

据我所知,没有编程语言将绑定的概念引入语言中(即,通过语言功能来同步对象的两个实例的状态,例如将Observer模式作为事件被引入C#中),因此,在设计实现MVVM模式的系统时必须对活页夹进行编码。

如您的问题所述,维基百科对活页夹的定义很糟糕。他们正在将标记语言与绑定行为相结合。WPF的标记语言Xaml只是描述对象图的XML。它通过添加标记扩展来扩展xml,标记扩展是通过特殊格式的属性值定义的。



xaml反序列化器将这些特殊属性识别为标记扩展,实际上是扩展类MarkupExtension。xaml解串器将它们包含在反序列化过程中。上面示例中的Binding类是的类型MarkupExtension,并且是WPF中绑定程序的主要(但不是唯一!)实现。

WPF中的绑定系统非常复杂。它主要基于DependencyProperties,但可以与INotifyPropertyChanged属性很好地交互,并且可以与POCO属性以有限的方式进行交互。在反序列化期间,将按照标记中的说明实例化和配置这些绑定,然后与绑定子系统一起将View和View Model绑定在一起。

我对淘汰赛比对Angular更为熟悉,但是过程相似。您可以在UI中定义绑定,该绑定由框架在构建DOM之后不久的某个时间点进行解释。这是由框架本身确定的某种机制触发的。然后,框架将解释这些绑定,以便将视图模型内的可观察属性与UI绑定在一起。

没有这种解释工作,您的绑定定义就只能放在HTML中,而无所事事。有些东西必须解释它们并建立绑定,以处理状态同步。

在淘汰赛中,当您调用时ko.applyBindings(),会在视图模型中传递时发生这种情况。无需调用它,所有data-bind绑定定义都将在html中不使用。

该过程在每个框架中的发生方式,实现方式以及每个调用其绑定的方式都可以不同。

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有