Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin MvvmCross iOS布尔值到颜色值转换器不更改标签文本颜色_C#_Ios_Xamarin_Mvvmcross - Fatal编程技术网

C# Xamarin MvvmCross iOS布尔值到颜色值转换器不更改标签文本颜色

C# Xamarin MvvmCross iOS布尔值到颜色值转换器不更改标签文本颜色,c#,ios,xamarin,mvvmcross,C#,Ios,Xamarin,Mvvmcross,我正在尝试使用MvvmCross的值转换器更改iOS标签的文本颜色。下面是一些代码(在核心项目中): 但是由于某种原因,当布尔属性从true变为false时,我看到绑定到该属性的其他字段正确地改变了,但标签的文本颜色没有改变 我看过@slodge视频、教程和下载的git示例,但仍然无法实现。我认为这与转换器没有返回正确的值有关,因为我设置了断点,转换器被触发。有什么想法吗?首先,如果这段代码是应用程序中对TextColor的唯一引用,那么当LinkerBehaviour设置为Link SDK a

我正在尝试使用MvvmCross的值转换器更改iOS标签的文本颜色。下面是一些代码(在核心项目中):

但是由于某种原因,当布尔属性从true变为false时,我看到绑定到该属性的其他字段正确地改变了,但标签的文本颜色没有改变


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

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

如果这不是唯一的问题,那么您还没有安装。这样做会解决你的问题。如果没有,请考虑重新绑定如下:

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

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

bindingSet.Apply();

谢谢卢克,谢谢你的编辑。我确实安装了MVxColor插件。我不太理解LinkerPlaseInclude方法。我在我的项目中找不到该类,所以我假设它必须手动添加。我使用MvxColorValueConverter遵循了您的方法,但在应用程序启动时出现了一个错误。我会按照你的建议来做,并让你知道它是如何进行的。实际上,使用MvxColor方法就做到了。我错过了IOS项目中的Mvx颜色插件。我在核心项目中有,但在IOS项目中没有。非常感谢Luke。使用Mvx插件的一般经验法则是确保将插件添加到核心和平台项目中。插件通常有一个可移植的接口和特定于平台的实现,因此添加这两个接口可以确保插件正常工作。
this.CreateBinding(LabelName).For(s => s.TextColor).To((MyViewModel vm) => vm.BooleanPropertyThatChangesAtSomePoint).WithConversion("BoolToColor").Apply();
public void Include()
{
    var label = new UILabel
    {
        TextColor = UIColor.Black
    };
}
var bindingSet = this.CreateBindingSet<MyViewController, MyViewModel >();

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

bindingSet.Apply();
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);
    }
}