2016-06-09 1 views
1

Я пытался реализовать ValueConverter для MVVMCross, но, похоже, он не работает, как я ожидал бы. Итак, на данный момент у меня только что появилось другое свойство, которое преобразует (MvxColor в TextColor) для меня и связывает его с моим макетом. Но OFC я предпочел бы использовать преобразователи значений, поэтому, возможно, у вас есть представление о том, что IAM делает неправильно:MVVMCross ValueConverter Bool To MvxColor/Color

связывание IAM ошибки в настоящее время получаю:

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 

Мой План-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" /> 

два преобразователя классов я опробовал:

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

} 

-м ing является обязательным, как правило, работает с MvxColor-Property, просто преобразование, похоже, является проблемой. Так что, наверное, я просто что-то пропустил.

Так что спасибо за помощь.

Edith: А имущество ...

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

ответ

3

сдирать Mvx -prefix и ValueConverter -suffix от имени преобразователя в вашем связывании:

Изменить

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

до

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

Это поведение описано в documentation for ValueConverters:

Эта зачистка находит все instanciable классы, которые реализуют IMvxValueConverter в сборках создает экземпляр каждого из регистров экземпляра с именем раздели любого префикса MVX и любой Положения ValueConverter или конвертера. Так, например, следующие имена классов будут все зарегистрированы с тем же именем ValueConverter из "Foo":

Foo, FooValueConverter, FooConverter, MvxFooValueConverter, MvxFooConverter

+0

Ну что ж, надо было видеть что ... спасибо! – Cyriac