C# 流畅的绑定和UIButton标题

C# 流畅的绑定和UIButton标题,c#,xamarin.ios,mvvmcross,C#,Xamarin.ios,Mvvmcross,由于我的用户界面通常需要本地化字符串,因此我的视图模型提供视图使用的所有字符串。这包括按钮上的标题等内容 在iOS端,通过SetTitle方法设置按钮标题。 为了使视图模型字符串=>按钮标题映射正常工作,MvvmCross进行了一些神奇的绑定转换,以使其正常工作 假设我在视图中有一个名为Foo的UIButton,我想将其标题映射到视图模型中的属性ButtonLabel。为了建立这样的绑定,需要了解以下工作: this.AddBindings(new Dictionary<object, s

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

在iOS端,通过SetTitle方法设置按钮标题。
为了使视图模型字符串=>按钮标题映射正常工作,MvvmCross进行了一些神奇的绑定转换,以使其正常工作

假设我在视图中有一个名为Foo的UIButton,我想将其标题映射到视图模型中的属性ButtonLabel。为了建立这样的绑定,需要了解以下工作:

this.AddBindings(new Dictionary<object, string>() {
      {Foo, "Title ButtonTitle"}
 });
this.AddBindings(新字典(){
{Foo,“标题按钮”}
});
可以使用MvvmCross中的Fluent绑定系统设置相同的绑定吗?我一直在阅读MvvmCross源代码,但还没有完全理解绑定代码

以下操作不起作用(因为实际上按钮没有Title属性-它有一个SetTitle方法):

var set=this.CreateBindingSet();
set.Bind(Foo).For(b=>b.Title).To(vm=>vm.ButtonTitle);
set.Apply();

是否有其他方法可以使用流畅的绑定来实现所需的结果

因为按钮没有标题属性,那么

set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle);
不会编译

但是,Xamarin.ios的默认MvvmCross配置具有为UIButton和“Title”定义的自定义绑定,请参见:

  • 其注册号为:
因此,您应该能够拨打:

set.Bind(Foo).For("Title").To(vm => vm.ButtonTitle);
这将设置与以下相同的绑定:

this.AddBindings(new Dictionary<object, string>() {
  {Foo, "Title ButtonTitle"}
});
this.AddBindings(新字典(){
{Foo,“标题按钮”}
});

有关自定义绑定的简要介绍,请参见:

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

他们是这样做的:

set.Bind(Button).For(v => v.BindTitle()).To(vm => vm. ButtonTitle);
请确保使用以下方法添加此项:

using MvvmCross.Binding.iOS;

在文档中可以找到扩展属性的完整列表,并且是PR的变化。对于本地化字符串,

,您可能还想考虑本地化语言绑定功能——看,那太棒了。你已经回答了我的问题和我问过的其他几个问题。斯图尔特还提到:“如果你看一下,你会看到我们如何向系统添加‘SpecialProperty’绑定属性和‘HitThis’绑定属性。”
using MvvmCross.Binding.iOS;