Fluent Bindings和UIButton标题

时间:2013-05-25 15:23:36

标签: c# xamarin.ios mvvmcross

由于我的用户界面通常需要具有本地化字符串,因此我的视图模型提供了视图所使用的所有字符串。这包括按钮上的标题等内容。

在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获得所需的结果?

2 个答案:

答案 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)

在较新版本的MvvmCross 5.x中,存在基于强类型代码的绑定属性。

他们是这样完成的:

set.Bind(Button).For(v => v.BindTitle()).To(vm => vm. ButtonTitle);

确保使用以下方式添加:

using MvvmCross.Binding.iOS;

可以在文档here中找到扩展属性的完整列表,this是更改所包含的PR。