我想为android创建一个经典的BooleanToVisibilityConverter,我遵循这个https://github.com/slodge/NPlus1DaysOfMvvmCross/tree/master/N-04-ValueConverters,但在这个示例中,所有转换器都在Core项目中。我在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(包装器托管到本机)System.Enum:ToObject(System.Type,object) [0:] MvxBind:错误:99.25在可见性的绑定执行期间出现问题 - 问题ArgumentException:传入的值必须是枚举基础或枚举的基础类型,例如Int32。 参数名称:value at(包装器托管到本机)System.Enum:ToObject(System.Type,object) 在Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue(System.Type propertyType,System.Object value)[0x00000] in:0 在Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.MakeSafeValue(System.Object value)[0x00000] in:0 在Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue(System.Object value)[0x00000] in:0 在Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource(Boolean isAvailable,System.Object value)[0x00000] in:0 09-26 16:11:34.300 I / mono-stdout(18362):在Cirrious.MvvmCross.Binding.ExtensionMethods.MvxTypeExtensions.MakeSafeValue(System.Type propertyType,System.Object value)[0x00000] in:0 09-26 16:11:34.300 I / mono-stdout(18362):在Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.MakeSafeValue(System.Object value)[0x00000] in:0 09-26 16:11:34.300 I / mono-stdout(18362):在Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValue(System.Object value)[0x00000] in:0 09-26 16:11:34.300 I / mono-stdout(18362):在Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource(Boolean isAvailable,System.Object value)[0x00000] in:0 El programa'Mono'terminóconcódigo0(0x0)。
答案 0 :(得分:3)
您需要通过覆盖ValueConverter
在Setup.cs
文件中注册ValueConverterAssemblies
。
protected override List<Assembly> ValueConverterAssemblies
{
get
{
var toReturn = base.ValueConverterAssemblies;
toReturn.Add(typeof(BoolToVisibilityValueConverter).Assembly);
return toReturn;
}
}