这个Q& A回答的问题是我们如何使用mvvmcross在我们的UI项目上显示颜色,当我们有一个ViewModel,例如一个Enumeration Property,而不需要Color属性,并且没有每个平台的ValueConverter。
答案 0 :(得分:7)
假设您有一个像这样的视图模型
public enum MyEnum
{
Value1,
Value2
}
public class MyViewModel : MvxViewModel
{
public MyEnum MyEnumProp { get... set...}
}
假设您要为Value2显示Azure Color,为Value2显示Black,您可以在Core项目上实现此转换器。
public class MyEnumToColorConverter: MvxValueConverter<MyEnum, object>
{
protected override object Convert (Multiplier value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
MvxColor mvxColor = null;
switch (value) {
case MyEnum.Value1:
mvxColor = new MvxColor(240,255,255);
break;
case MyEnum.Value2:
mvxColor = new MvxColor(0,0,0);
break;
default:
mvxColor = new MvxColor(0,0,0);
break;
}
var nativeColorConv = Mvx.Resolve<IMvxNativeColor>();
return nativeColorConv.ToNative (mvxColor);
}
}
诀窍是致电Mvx.Resolve<IMvxNativeColor>()
。在您的UI项目中,如果您加载了正确的Color插件,您将自动为您的平台获得正确的Color实现。
请记住将此行添加到Setup.cs中(如果您添加颜色插件Nuget包,它会自动将其添加到Bootstrap文件夹中,则不需要)。
Cirrious.MvvmCross.Plugins.Color.PluginLoader.Instance.EnsureLoaded();