我正在尝试使用带有MvvmCross的值转换器来更改iOS Label的文本颜色。这里有一些代码(这是在Core项目中):
public String intValue() {
return (x + " " + y);
}
然后,关于我的约束力:
public class BoolToColorValueConverter
: MvxValueConverter<bool, object>
{
protected override object Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MvxColor mvxColor = null;
if(value)
mvxColor = new MvxColor(255, 0, 0);
else
mvxColor = new MvxColor(0, 0, 0);
var nativeColorConv = Mvx.Resolve<IMvxNativeColor>();
return nativeColorConv.ToNative(mvxColor);
}
}
但由于某种原因,当boolean属性从true变为false时,我看到绑定到该属性的其他字段正确更改,但不会更改标签的文本颜色。
我已经看过@slodge视频,教程,下载的git示例但仍然无法使其工作。我认为这与转换器没有返回正确的值有关,因为我放置了断点并且转换器已被触发。有什么想法吗?
答案 0 :(得分:1)
首先,如果该段代码是您应用中TextColor
的唯一引用,那么当UILabel
为LinkerBehaviour
时,汇编链接过程可能会优化Link SDK assemblies only
的某些属性设置为Link all assemblies
或LinkerBehaviour
。如果您的项目属于这种情况,则修复方法是将Don't link
更改为public void Include()
{
var label = new UILabel
{
TextColor = UIColor.Black
};
}
(不理想),或将以下方法添加到LinkerPleaseInclude:
var bindingSet = this.CreateBindingSet<MyViewController, MyViewModel >();
bindingSet.Bind(LabelName).For(c => c.TextColor).To(vm => vm.TestBoolean).WithConversion(new BoolToColorValueConverter());
bindingSet.Apply();
如果这不是唯一的问题,那么您尚未安装Mvx Color Plugin。这样做将解决您的问题。如果没有,请考虑按如下方式重做绑定:
MvxColorValueConverter
P.S。 - 只是一个提示:
使用颜色插件可以访问public class BoolToColorValueConverter : MvxColorValueConverter
{
protected override MvxColor Convert(object value, object parameter, CultureInfo culture)
{
return (bool)value
? new MvxColor(255, 0, 0)
: new MvxColor(0, 0, 0);
}
}
,这为您提供了一种更简洁的颜色转换方式:
{{1}}