2016-06-09 7 views
1

Ich habe versucht, den ValueConverter für MVVMCross zu implementieren, aber aparently funktioniert es nicht so, wie ich es erwarten würde. Also habe ich gerade eine andere Property bekommen, die die Konvertierung (MvxColor to TextColor) für mich vornimmt und an mein Layout bindet. Aber OFC i eher die Wertwandler verwenden würde, vielleicht haben Sie eine Ahnung, was iam falsch zu machen:MVVMCross ValueConverter Bool zu MvxColor/Color

Die Bindung Fehler iam zur Zeit bekommen:

06-09 16:29:29.820 I/MvxBind (16312): 61,64 Problem seen during binding execution for binding TextColor for Changed - problem InvalidCastException: Specified cast is not valid. 
06-09 16:29:29.820 I/MvxBind (16312):  at MvvmCross.Plugins.Color.Droid.BindingTargets.MvxTextViewTextColorBinding.SetValueImpl (System.Object target, System.Object value) [0x0000a] in <filename unknown>:0 
06-09 16:29:29.820 I/MvxBind (16312): at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00088] in <filename unknown>:0 
06-09 16:29:29.820 I/MvxBind (16312): at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00024] in <filename unknown>:0 
MvxBind:Error: 61,64 Problem seen during binding execution for binding TextColor for Changed - problem InvalidCastException: Specified cast is not valid. 
06-09 16:29:29.820 I/mono-stdout(16312): MvxBind:Error: 61,64 Problem seen during binding execution for binding TextColor for Changed - problem InvalidCastException: Specified cast is not valid. 
06-09 16:29:29.820 I/mono-stdout(16312):  at MvvmCross.Plugins.Color.Droid.BindingTargets.MvxTextViewTextColorBinding.SetValueImpl (System.Object target, System.Object value) [0x0000a] in <filename unknown>:0 
     at MvvmCross.Plugins.Color.Droid.BindingTargets.MvxTextViewTextColorBinding.SetValueImpl (System.Object target, System.Object value) [0x0000a] in <filename unknown>:0 
    at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00088] in <filename unknown>:0 
06-09 16:29:29.830 I/mono-stdout(16312): at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00088] in <filename unknown>:0 
    at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00024] in <filename unknown>:0 
06-09 16:29:29.830 I/mono-stdout(16312): at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00024] in <filename unknown>:0 
[0:] MvxBind:Error: 61,64 Problem seen during binding execution for binding TextColor for Changed - problem InvalidCastException: Specified cast is not valid. 
     at MvvmCross.Plugins.Color.Droid.BindingTargets.MvxTextViewTextColorBinding.SetValueImpl (System.Object target, System.Object value) [0x0000a] in <filename unknown>:0 
    at MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00088] in <filename unknown>:0 
    at MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00024] in <filename unknown>:0 

mein Layout-Snippet:

<EditText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:singleLine="true" 
     android:inputType="numberDecimal|numberSigned" 
     android:textColor="@color/schaefflerlightgreen" 
     local:MvxBind="TextColor Changed,Converter=MvxBoolToColorValueConverter" /> 

Die beiden Konverter Klassen i ausprobiert:

public class MvxBoolToMvxColorValueConverter: MvxColorValueConverter<bool> 
{ 

    protected override MvxColor Convert(bool value, object parameter, CultureInfo culture) 
    { 
     if (value) 
     { 
      // FF0000 
      return new MvxColor(255, 0, 0); 
     } 
     //227D41 
     return new MvxColor(34, 125, 65); 
    } 
} 

    public class MvxBoolToColorValueConverter : MvxValueConverter<bool, Color> 
{ 

    protected override Color Convert(bool value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value) 
     { 
      // FF0000 
      return new Color(255, 0, 0); 
     } 
     //227D41 
     return new Color(34, 125, 65); 
    } 

} 

Die th Wenn die Bindung in der Regel mit einer MvxColor-Eigenschaft arbeitet, scheint nur die Konvertierung ein Problem zu sein. Also wahrscheinlich habe ich gerade etwas verpasst.

Also vielen Dank für Ihre Hilfe.

Edith: Und das Eigentum ...

public bool Changed { get { return m_sValue != m_sSyncValue; } } 

Antwort

3

Streifen aus dem Mvx -prefix und der ValueConverter -suffix aus dem Namen Konverter in Ihrer Bindung:

ändern

local:MvxBind="TextColor Changed,Converter=MvxBoolToColorValueConverter" /> 

zu

local:MvxBind="TextColor Changed,Converter=BoolToColor" /> 

Dieses Verhalten in der documentation for ValueConverters beschrieben:

Dieser Sweep alle instanciable Klassen lokalisiert, die IMvxValueConverter innerhalb Ihrer Baugruppen implementieren erstellt eine Instanz von jedem registriert die Instanz mit dem Namen jeder MVX Präfix gestrippt und alle ValueConverter oder Konverter Postfix. So zum Beispiel, werden die folgenden Klassennamen alle mit dem Namen gleichen Valueconverter von "Foo" registriert werden:

Foo, FooValueConverter, FooConverter, MvxFooValueConverter, MvxFooConverter

+0

Na ja, gesehen haben sollte das ... danke! – Cyriac