在MvvmCross上为多个平台共享Color Converter(mvvmcross v3)

nuk*_*bit 2 xamarin.ios xamarin.android mvvmcross

这个Q&A回答的问题是我们如何使用mvvmcross在我们的UI项目中显示颜色,当我们有一个带有枚举属性的ViewModel时,不需要具有Color属性,并且没有每个平台的ValueConverter.

nuk*_*bit 7

假设您有一个这样的视图模型

public enum MyEnum
{
   Value1,
   Value2
}
public class MyViewModel : MvxViewModel
{
   public MyEnum MyEnumProp { get... set...}
}
Run Code Online (Sandbox Code Playgroud)

假设您要为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);
    }
}
Run Code Online (Sandbox Code Playgroud)

诀窍是打电话Mvx.Resolve<IMvxNativeColor>().在您的UI项目中,如果您加载了正确的Color插件,您将自动为您的平台获得正确的Color实现.

请记住将此行添加到Setup.cs中(如果添加颜色插件Nuget包,则会自动将其添加到Bootstrap文件夹中).

Cirrious.MvvmCross.Plugins.Color.PluginLoader.Instance.EnsureLoaded();
Run Code Online (Sandbox Code Playgroud)