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