首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVMCross ValueConverter Bool To MvxColor/Color

MVVMCross ValueConverter Bool To MvxColor/Color
EN

Stack Overflow用户
提问于 2016-06-09 14:34:13
回答 1查看 1.6K关注 0票数 1

我试图实现ValueConverter for MVVMCross,但很明显,它并不像我所期望的那样工作。因此,现在我得到了另一个属性,它为我执行转换(MvxColor到TextColor),并将它绑定到我的布局。但是ofc我宁愿使用值转换器,所以你可能知道我做错了什么:

当前获得的绑定错误iam:

代码语言:javascript
复制
    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 

我的布局-片段:

代码语言:javascript
复制
<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" />

我尝试过的两个转换器类:

代码语言:javascript
复制
    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);
    }

}

问题是绑定通常使用MvxColor-属性,只是转换似乎是一个问题。所以可能是我漏掉了什么。

所以谢谢你的帮助。

伊迪丝:还有财产..。

代码语言:javascript
复制
public bool Changed { get { return m_sValue != m_sSyncValue; } }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 14:47:28

从绑定中的转换器名称中去掉Mvx-prefix和ValueConverter-suffix:

变化

代码语言:javascript
复制
local:MvxBind="TextColor Changed,Converter=MvxBoolToColorValueConverter" />

代码语言:javascript
复制
local:MvxBind="TextColor Changed,Converter=BoolToColor" />

这种行为在ValueConverters文档中描述。

此扫描定位在程序集中实现IMvxValueConverter的所有可实例化类,创建每个实例的实例,每个实例都注册名称为的实例,去掉任何Mvx前缀和任何ValueConverter或转换器后缀。因此,例如,以下类名都将注册为相同的ValueConverter名称"Foo": Foo,FooValueConverter,FooConverter,MvxFooValueConverter,MvxFooConverter

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37728912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档