1

我想为 android 创建一个经典的 BooleanToVisibilityConverter,我遵循这个https://github.com/slodge/NPlus1DaysOfMvvmCross/tree/master/N-04-ValueConverters,但在这个示例中,所有转换器都在核心项目中。我在 Droid 项目中创建了我的转换器并且不起作用。

我的 ValueConverter 代码:

public class BoolToVisibilityValueConverter : MvxValueConverter<bool, ViewStates>
    {
        protected override ViewStates Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == true)
            {
                return ViewStates.Visible;
            }
            else
            {
                return ViewStates.Gone;
            }
        }

        protected override bool ConvertBack(ViewStates value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == ViewStates.Gone)
            {
                return false;
            }
            else if (value == ViewStates.Invisible)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    }

还有我使用这个转换器的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        local:MvxBind="Text Message" />
    <ProgressBar
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:indeterminate="true"
        android:layout_gravity="bottom|center_horizontal"
        local:MvxBind="Visibility ProgressBarVisibility,Converter=BoolToVisibility" />
</LinearLayout>

谢谢!

编辑:

调试跟踪。

09-26 16:11:34.300 I/mono-stdout(18362): 参数名称: 值 09-26 16:11:34.300 I/mono-stdout(18362): at (wrapper managed-to-native) System.Enum :ToObject (System.Type,object) [0:] MvxBind:Error: 99.25 在对可见性的绑定执行期间看到的问题 - 问题 ArgumentException: 传入的值必须是枚举基础或枚举的基础类型,例如诠释32。参数名称:Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue(System.Type propertyType,System.Object 值)处(包装器托管到本机) System.Enum:ToObject (System.Type,object) 处的值 [0x00000 ] 在 Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.MakeSafeValue (System.Object 值) 的 :0 [0x00000] 在 Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue 的 :0 (System.

4

1 回答 1

3

您需要通过覆盖将其注册到ValueConverter您的文件中。Setup.csValueConverterAssemblies

protected override List<Assembly> ValueConverterAssemblies
{
    get
    {
        var toReturn = base.ValueConverterAssemblies;
        toReturn.Add(typeof(BoolToVisibilityValueConverter).Assembly);
        return toReturn;
    }
}

您可以在这里阅读更多相关信息:https ://github.com/slodge/MvvmCross/wiki/Value-Converters#referencing-value-converters-in-touch-and-droid

于 2013-09-25T18:46:05.940 回答