xamarin - MvvmCross CreateBindingSet 的预期用途
问题描述
所以我最近从我的一个队友那里遇到了一个有趣的场景。
他们目前正在一个Xamarin
项目中工作并利用MvvmCross
. 他们决定CreateBindingSet
直接在 xaml 中专门使用 over 绑定。
对我来说,这似乎是 Mvvm 的反模式。它将后面的代码与视图模型紧密耦合,并为设计为绑定在 xaml 中的平台增加了额外的复杂性。
我试图了解在后面的代码中使用这个函数是否是一个好主意,但我无法从文档中得出结论。
有人可以告诉我预期的用例是CreateBindingSet
什么吗?
解决方案
除了提供可轻松包含在 xml 布局文件中的文本格式绑定语句外,MvvmCross 还提供基于 C# 的语法,以便使用代码轻松构建绑定。
这种绑定语法称为Fluent绑定。
例如
MvvmCross
通过以下代码创建 View 和 ViewModel 之间的关系:
var set = this.CreateBindingSet<MyView, MyViewModel>();
For
然后你可以通过andTo
方法设置数据绑定:
set.Bind(LabelUserName).For(x => x.Text).To(vm => vm.UserName);
使用流利的语法我们可以继续指定绑定类型,比如 OneWay 和 TwoWay 等,像这样:
set.Bind(LabelUserName).For(x => x.Text).To(vm => vm.UserName).TwoWay();
Fluent binding 在 Xml 布局格式不易人工编辑的 iOS 和 OSX 平台中特别有用(在 iOS 和 MACOS 平台中没有这样的 xml 文件,因此我们需要在代码中设置绑定)。
有关更多详细信息,您可以查看https://www.mvvmcross.com/documentation/fundamentals/data-binding。
推荐阅读
- javascript - 如何从嵌套对象api json数据制作键值对对象数组
- javascript - 异步 Firebase 数据获取 React Native
- .net - scottplot xticks 未显示
- node.js - OLE 拖放中的 Outlook 未处理 IDataObjectAsyncCapability
- c - c 代码:防止在具有巨大模块的模块化操作中溢出(接近溢出阈值的模块)
- ssh - 无法在我的局域网外使用 webmin:VMWARE 上的 UBUNTU SERVER
- java - 使用递归和数组确保矩阵相邻
- c# - 如何避免在通过策略模式实现的控制器内部创建新的类实例?
- javascript - 删除列中的所有空单元格,然后将所有非空单元格向上移动
- xml - XPath 用分隔符连接选定的字符串或文本节点?