【发布时间】:2013-12-21 14:52:42
【问题描述】:
在这个问答中回答的问题是,当我们有一个带有例如枚举属性的 ViewModel 时,我们如何使用 mvvmcross 在我们的 UI 项目上显示颜色,而不需要有一个 Color 属性,也没有一个 ValueConverter每个平台。
【问题讨论】:
标签: xamarin.ios xamarin.android mvvmcross
在这个问答中回答的问题是,当我们有一个带有例如枚举属性的 ViewModel 时,我们如何使用 mvvmcross 在我们的 UI 项目上显示颜色,而不需要有一个 Color 属性,也没有一个 ValueConverter每个平台。
【问题讨论】:
标签: xamarin.ios xamarin.android mvvmcross
假设你有一个这样的视图模型
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();
【讨论】: