2

この Q&A で回答された問題は、列挙型プロパティなどを持つ ViewModel がある場合に、mvvmcross を使用して UI プロジェクトに色を表示する方法であり、Color プロパティは必要なく、プラットフォームごとに ValueConverter も必要ありません。

4

1 に答える 1

7

このようなビューモデルがあるとします

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

Value1 に 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);
    }
}

トリックは、呼び出すことMvx.Resolve<IMvxNativeColor>()です。UI プロジェクトで適切な Color プラグインをロードすると、プラットフォームに適切な Color 実装が自動的に取得されます。

この行を Setup.cs に追加することを忘れないでください (自動的に Bootstrap フォルダーに追加されるカラー プラグイン Nuget パッケージを追加する場合は必要ありません)。

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