2

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

4

1 回答 1

7

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

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

假设你想为 Value1 显示 Azure 颜色,为 Value2 显示黑色,你可以在你的核心项目上实现这个转换器。

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 项目中,如果您加载了正确的颜色插件,您将自动为您的平台获得正确的颜色实现。

请记住将此行添加到您的 Setup.cs(如果添加颜色插件 Nuget 包,它会自动将其添加到 Bootstrap 文件夹,则不需要)。

Cirrious.MvvmCross.Plugins.Color.PluginLoader.Instance.EnsureLoaded();
于 2013-04-08T10:44:47.953 回答