在此问答中回答的问题是,当我们拥有一个带有例如Enumeration属性的ViewModel,而无需具有Color属性且每个平台都没有ValueConverter时,如何使用mvvmcross在UI项目中显示颜色。

最佳答案

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

public enum MyEnum
{
   Value1,
   Value2
}
public class MyViewModel : MvxViewModel
{
   public MyEnum MyEnumProp { get... set...}
}


假设要显示Value1的Azure颜色和Value2的黑色,则可以在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();

关于xamarin.ios - 在MvvmCross上为多个平台共享Color Converter(mvvmcross v3),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15877139/

10-15 17:06