MvvmCross CreateBindingSet 的预期目的
The intended purpose of MvvmCross CreateBindingSet
所以我最近从我的一位队友那里遇到了一个有趣的场景。
他们目前正在 Xamarin
项目中工作并利用 MvvmCross
。他们决定在 xaml 中直接使用 CreateBindingSet
独占绑定。
对我来说,这似乎是 Mvvm 的反模式。它将后台代码与视图模型紧密耦合,并为旨在绑定 xaml 的平台增加了额外的复杂性。
我试图了解在后台代码中使用此函数是否是个好主意,但我无法从文档中了解它的正反面。
谁能告诉我 CreateBindingSet
的预期用例是什么?
除了提供可以轻松包含在 xml 布局文件中的文本格式绑定语句外,MvvmCross 还提供基于 C# 的语法,以便使用代码轻松构建绑定。
此绑定语法称为 Fluent 绑定。
例如
MvvmCross
通过以下代码创建View和ViewModel之间的关系:
var set = this.CreateBindingSet<MyView, MyViewModel>();
然后你可以通过For
和To
方法设置数据绑定:
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 绑定在 iOS 和 OSX 平台上特别有用,在这些平台上 Xml 布局格式不易被人工编辑(在 iOS 而MACOS平台没有这样的xml文件所以我们需要在代码后面设置绑定)。
有关详细信息,您可以查看 https://www.mvvmcross.com/documentation/fundamentals/data-binding。
所以我最近从我的一位队友那里遇到了一个有趣的场景。
他们目前正在 Xamarin
项目中工作并利用 MvvmCross
。他们决定在 xaml 中直接使用 CreateBindingSet
独占绑定。
对我来说,这似乎是 Mvvm 的反模式。它将后台代码与视图模型紧密耦合,并为旨在绑定 xaml 的平台增加了额外的复杂性。
我试图了解在后台代码中使用此函数是否是个好主意,但我无法从文档中了解它的正反面。
谁能告诉我 CreateBindingSet
的预期用例是什么?
除了提供可以轻松包含在 xml 布局文件中的文本格式绑定语句外,MvvmCross 还提供基于 C# 的语法,以便使用代码轻松构建绑定。
此绑定语法称为 Fluent 绑定。
例如
MvvmCross
通过以下代码创建View和ViewModel之间的关系:
var set = this.CreateBindingSet<MyView, MyViewModel>();
然后你可以通过For
和To
方法设置数据绑定:
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 绑定在 iOS 和 OSX 平台上特别有用,在这些平台上 Xml 布局格式不易被人工编辑(在 iOS 而MACOS平台没有这样的xml文件所以我们需要在代码后面设置绑定)。
有关详细信息,您可以查看 https://www.mvvmcross.com/documentation/fundamentals/data-binding。