【问题标题】:Sharing Color Converter on MvvmCross for multiple platform (mvvmcross v3)在 MvvmCross 上为多个平台共享颜色转换器 (mvvmcross v3)
【发布时间】:2013-12-21 14:52:42
【问题描述】:

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

【问题讨论】:

    标签: xamarin.ios xamarin.android mvvmcross


    【解决方案1】:

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

    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&lt;IMvxNativeColor&gt;()。在您的 UI 项目中,如果您加载了正确的 Color 插件,您将自动为您的平台获得正确的 Color 实现。

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

    Cirrious.MvvmCross.Plugins.Color.PluginLoader.Instance.EnsureLoaded();
    

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多