gpt4 book ai didi

c# - Xamarin MvvmCross iOS Bool to Color ValueConverter 不改变标签文本颜色

转载 作者:行者123 更新时间:2023-11-29 11:45:49 24 4
gpt4 key购买 nike

我正在尝试使用带有 MvvmCross 的值转换器来更改 iOS 标签的文本颜色。这是一些代码(在 Core 项目中):

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);
}
}

然后,在我的绑定(bind)上:

this.CreateBinding(LabelName).For(s => s.TextColor).To((MyViewModel vm) => vm.BooleanPropertyThatChangesAtSomePoint).WithConversion("BoolToColor").Apply();

但出于某种原因,当 bool 属性从 true 变为 false 时,我看到绑定(bind)到该属性的其他字段正确更改,但标签的文本颜色没有更改。

我看过@slodge 视频、教程、下载的 git 示例,但仍然无法正常工作。我认为这与转换器没有返回正确的值有关,因为我设置了断点并触发了转换器。有什么想法吗?

最佳答案

首先,如果那段代码是您应用中对 TextColor 的唯一引用,那么程序集链接过程可能会在以下情况下优化掉 UILabel 的一些属性LinkerBehaviour 设置为 Link SDK assemblies onlyLink all assemblies。如果您的项目属于这种情况,解决方法是将 LinkerBehaviour 更改为 Don't link(不理想),或者将以下方法添加到 LinkerPleaseInclude :

public void Include()
{
var label = new UILabel
{
TextColor = UIColor.Black
};
}

如果这不是唯一的问题,那么您还没有安装 Mvx Color Plugin 。这样做应该可以解决您的问题。如果没有,请考虑按如下方式重新绑定(bind):

var bindingSet = this.CreateBindingSet<MyViewController, MyViewModel >();

bindingSet.Bind(LabelName).For(c => c.TextColor).To(vm => vm.TestBoolean).WithConversion(new BoolToColorValueConverter());

bindingSet.Apply();

附言- 提示:

颜色插件使您可以访问 MvxColorValueConverter,它为您提供了一种更简洁的颜色转换方式:

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);
}
}

关于c# - Xamarin MvvmCross iOS Bool to Color ValueConverter 不改变标签文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005514/

24 4 0