c# - Fluent Bindings 和 UIButton 标题

标签 c# xamarin.ios mvvmcross

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

在 iOS 端,按钮标题是通过 SetTitle 方法设置的。
为了让 View 模型字符串 => 按钮标题映射工作,MvvmCross 做了一些神奇的绑定(bind)转换来让它很好地工作。

假设我的 View 中有一个名为 Foo 的 UIButton,我想将其标题映射到我的 View 模型中的属性 ButtonLabel。了解以下工作以设置此类绑定(bind):

this.AddBindings(new Dictionary<object, string>() {
      {Foo, "Title ButtonTitle"}
 });

是否可以使用 MvvmCross 中的 Fluent Binding 系统设置相同的绑定(bind)?我一直在通读 MvvmCross 源代码,但我不太了解绑定(bind)代码。

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

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

有没有其他方法可以使用 Fluent Bindings 实现预期的结果?

最佳答案

因为按钮没有Title属性,所以

set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle);

不会编译。

但是,Xamarin.ios 的默认 MvvmCross 配置具有为 UIButton 和“标题”定义的自定义绑定(bind) - 请参阅:

因此你应该可以调用:

set.Bind(Foo).For("Title").To(vm => vm.ButtonTitle);

这应该设置与以下相同的绑定(bind):

this.AddBindings(new Dictionary<object, string>() {
  {Foo, "Title ButtonTitle"}
});

有关自定义绑定(bind)的简要介绍,请参阅:https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross

关于c# - Fluent Bindings 和 UIButton 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751013/

相关文章:

c# - 如何在另一个类中获取当前 Controller 实例?

c# - 如何修改我的快速排序算法以便它可以对 Double 数据类型数组进行排序?

ipad - 适用于 iPad 的 MonoTouch : How to show a popup dialog?

android - 使用逗号作为带有 MvvmCross 的 android EditText 的小数点分隔符

xamarin.android - 使用后退按钮关闭 Mvvmcross 教程

c# - 防止使用默认构造函数

c# - 在 Visual C# 中创建全局变量

xamarin.ios - 自定义 Xamarin.Forms 布局

xaml - Xamarin Forms Center Collection查看内容

c# - MvvmCross (Android) 似乎保留了 ViewModels 并且从不丢弃,我错过了什么