如何绑定NSAttributeString(或NSMutableAttributedString)

我想使用MVVMCross将一个属性string绑定到一个UILabel。 绑定一个常规string,我只是做:

set.Bind(MyLabel).To(vm => vm.MyString); 

但是我需要一个string,其中一部分文本将使用一种颜色和一种字体大小,而另一部分将使用不同的颜色和不同的字体大小。 如果这是静态的,没问题,我会在界面生成器中添加一个标签,并将其设置为“属性”,然后设置任何字体选项,我想要哪些部分的string我需要。

所以我想用Mvvmcross,我可能需要一个转换器将我的源string转换为一个属性的string,所以我试图创build一个转换器从MvxValueConverter<string,NSMutableAttributedString> ,只是在它的Convert方法:

 return new NSMutableAttributedString(value); 

最终我会添加一些不同的属性。 不幸的是,这是行不通的。 如果我这样设置我的绑定:

 set.Bind(MyLabel).To(vm => vm.MyString).WithConversion("MyConverter"); 

看来,MvvmCross只是对属性string做一个.ToString ,它显示为:

 Some Text {} 

请注意{}不是原始string的一部分。

有没有办法在MVVMCross绑定一个属性的string?

如果你打电话

  set.Bind(MyLabel).To(vm => vm.MyString); 

那么你绑定了你的UILabel的默认属性,这是string属性Text。

您需要改为绑定AttributedText。 尝试添加如下内容:

  .For(l => l.AttributedText) 

这里有一些关于使用AttributedText的问题 – 例如在UILabel中的下划线文本在monotouch(移植ObjC代码)

有关mvx数据绑定的更多信息,请参阅https://github.com/slodge/MvvmCross/wiki/Databinding