自定义可见性转换器 - Android - 发布(MvvmCross)

时间:2014-10-06 19:54:25

标签: android xamarin.android mvvmcross

我使用MvvmCross为Android开发了一个应用程序。它的一部分应该显示ImageView或MvxImageView。当我在调试模式下测试它工作正常,但当我将其更改为释放模式时,可见性转换器似乎停止工作。所有其他转换器按照应有的方式工作,只有那些转换器停止工作。

我的xml简历:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">
    <ImageView
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:scaleType="fitCenter"
        local:MvxBind="Visibility MyObject, Converter=ByteInverseVisibility; AssetImagePath MyObject, Converter=AttachmentTypeToSource" />
    <Mvx.MvxImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:maxHeight="150dp"
        android:adjustViewBounds="true"
        local:MvxBind="Visibility MyObject, Converter=ByteVisibility; Bitmap MyObject.Attachment, Converter=InMemoryImage" />
</LinearLayout>

转换器:

public class ByteVisibilityConverter : MvxBaseVisibilityValueConverter<MyObjectClass>
{
    protected override MvxVisibility Convert(MyObjectClass value, object parameter, CultureInfo culture)
    {
        if (value.AttachType == AttachmentType.Photo && value.Attachment != null)
        {
            return MvxVisibility.Visible;
        }

        return MvxVisibility.Collapsed;
    }
}

public class ByteInverseVisibilityConverter : MvxBaseVisibilityValueConverter<MyObjectClass>
{
    protected override MvxVisibility Convert(MyObjectClassvalue, object parameter, CultureInfo culture)
    {
        if (value.AttachType != AttachmentType.Photo || value.Attachment == null)
        {
            return MvxVisibility.Visible;
        }

        return MvxVisibility.Collapsed;
    }
}

1 个答案:

答案 0 :(得分:4)

原因是因为包装中没有包含Visibility属性。

你必须添加以下内容:

public void Include(ImageView imageView)
    {
        imageView.Visibility = imageView.imageView;
    }

在您的LinkerPleaseInclude.cs文件中。