Xamarin MvvmCross iOS Bool到Color ValueConverter不改变标签文本颜色

时间:2017-05-16 15:21:49

标签: c# ios xamarin mvvmcross

我正在尝试使用带有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示例但仍然无法使其工作。我认为这与转换器没有返回正确的值有关,因为我放置了断点并且转换器已被触发。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

首先,如果该段代码是您应用中TextColor的唯一引用,那么当UILabelLinkerBehaviour时,汇编链接过程可能会优化Link SDK assemblies only的某些属性设置为Link all assembliesLinkerBehaviour。如果您的项目属于这种情况,则修复方法是将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}}