由于我的用户界面通常需要具有本地化字符串,因此我的视图模型提供了视图所使用的所有字符串。这包括按钮上的标题等内容。
在iOS端,通过SetTitle方法设置按钮标题 为了获得视图模型string =>按钮标题映射工作,MvvmCross做了一些神奇的绑定翻译,以使其工作得很好。
说我的视图中有一个名为Foo的UIButton,我想将其标题映射到View Model中的属性ButtonLabel。知道以下工作以设置这样的绑定:
this.AddBindings(new Dictionary<object, string>() {
{Foo, "Title ButtonTitle"}
});
可以使用MvvmCross中的Fluent Binding系统设置相同的绑定吗?我一直在阅读MvvmCross源代码,但我还没有得到绑定代码。
以下内容不起作用(因为实际上按钮没有Title属性 - 它有一个SetTitle方法):
var set = this.CreateBindingSet<FooView, FooViewModel>();
set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle);
set.Apply();
是否有其他方法可以使用Fluent Bindings获得所需的结果?
答案 0 :(得分:27)
因为按钮没有Title属性,所以
set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle);
不会编译。
但是,Xamarin.ios的默认MvvmCross配置为UIButton和&#34; Title&#34;定义了自定义绑定。 - 见:
因此,您应该可以致电:
set.Bind(Foo).For("Title").To(vm => vm.ButtonTitle);
这应该设置相同的绑定:
this.AddBindings(new Dictionary<object, string>() {
{Foo, "Title ButtonTitle"}
});
有关自定义绑定的简要介绍,请参阅:https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross
答案 1 :(得分:3)